목록전체 글 (25)
기록하는 공간
https://velog.io/@dev_choi0409/posts

문제 정의현재 진행 중인 끄적끄적 프로젝트에서 블록 개수가 많아질수록 조회 성능이 느려진다는 피드백을 받았다.(블록 개수가 10개, 20개일 때는 문제가 없지만, 점점 많아지게 되면 성능 저하가 체감되었다.)초기에는 이 문제가 단순히 서버 성능 때문이라고 판단했다.현재 AWS EC2 t2.micro 인스턴스(CPU 1개, 메모리 1GB)를 사용 중이기 때문이다.그러나 다른 프로젝트에서 동일한 서버 스펙으로 성능 문제가 없었던 점을 감안해 이번에는 쿼리 및 로직 최적화에 집중하기로 했다. 문제 원인 분석아래는 위 사진과 같이 기존 코드를 실행했을 때의 쿼리이다.Hibernate: select * from member where email=?Hibernate: select * from block ..

프리코스 4주 차는 어땠나요?이전 3주 차 회고 글에서 가장 어려운 미션이 로또라고 했었는데, 이번 미션을 수행하면서 바뀌었다.이렇게 조건이 많은 미션은 처음이었다.그래도 마지막 미션이라는 생각에 열심히 수행했다.미션에 임하는 자세 (목표)이번 미션은 혹시 모를 최종 코딩 테스트를 대비하여 하루 날을 잡아 5시간 동안 구현을 해보기로 했다.이 미션을 5시간 진행하면서 임하는 목표는 아래와 같다. 미션에만 집중하기휴대폰을 하거나, 멍을 때리는 등 집중이 흐려지는 행동은 하지 않기로 했다.백색소음이 있는 환경에서 최대한 최종 코딩 테스트와 비슷한 환경을 만들어 연습하기만약 나중에 최종 코딩 테스트에 간다면 이 연습은 도움이 될 것이라 생각했다.연습하는 5시간 동안 생성형 AI 사용하지 않기실제로 최종 코딩 ..

프리코스 3주 차는 어땠나요?3주 차는 개인적으로 지금까지 했던 미션 중 가장 어렵다고 생각한 미션이었다. 실제로 로또를 구매해 본 적도 없고 관심도 없어서 그런지 로또가 어떤 흐름으로 발매가 되는지, 번호는 어떻게 되는지 잘 몰랐다. 그래서 근본적인 로또에 대해 고민하며 시작하게 되었다. 미션에 임하는 자세 (목표)이번 미션의 목표는 1, 2주 차에서 받은 코드 리뷰와 그동안의 회고를 바탕으로 코드를 개선하는 것이다. 그래서 코드 리뷰에서 받은 피드백을 근거를 찾아 적용하고, 또, 모든 코드에 의미를 담으려 한다. 피드백 수용, 코드를 사용한 근거는?1) 나는 왜 생성자 내부에서 객체를 생성했는가 먼저 코드 리뷰에서 생성자 내부에서 객체를 생성하는 것보다 의존성 주입으로 변경하는 것이 어떻겠냐는 피드백..

프리코스 2주 차는 어땠나요?2주 차도 시험과 함께 시작을 했다. 1주 차와 동일하게 시험 전에 2주 차 과제가 등장했다.하지만 문제를 보고 마음이 살짝 편했다. 우아한테크코스 프리코스 6기 때와 같은 문제였다.알고 있던 문제기도 했고, 시험이 겹쳐있어서 혹여나 1주 차와 같이 다른 문제가 나오면 쉽지 않았을 것이라 생각했다.목표 찾기이미 풀어봤던 문제였기에, 어떤 목표를 가지고 구현을해야 내게 더 도움이 될지, 어떻게 하면 내가 성장할지 고민했다. 했던걸 그대로 따라 하는 것은 무의미하고 성장을 할 수 없다는 것을 너무 잘 알았다.그래서 이전에 작성했던 코드를 리팩토링하고 더 객체지향적으로 구현하는 목표를 잡았다.이 목표를 달성하기위해 나는 내 코드의 문제점을 찾았다.문제점View가 Domain을 알고..

시험이 끝난 지금 나는 우아한테크코스 7기 프리코스 1주 차를 회고하려 한다. 프리코스 1주 차는 어땠나요?고난과 역경. 시작부터 왜..?대학생인 나는 시험과 함께 1주 차를 맞이했다.1주 차 과제는 시험 하루 전인 화요일에 나오게 되었다. 수, 목 연속으로 시험을 보는 나에게 있어서 정말… 쉽지 않았다.그래서 과제가 나오자마자 대충 한 번 문제를 읽어보고 “오 쉽다” 하고 시험에 집중했다.(이때 잘못 생각했다… “오 쉽다”를 외치면 안 됐는데…) 그 주 시험이 끝나고…아직 시험이 한 개 남았었지만, 즐거운 마음으로 1주 차 문제를 열었다.문제를 읽으면 읽을수록 잘못됨을 느꼈다.어..? 커스텀.. 구분자? 네? 머릿속에 여러 예외 상황들이 스쳐 지나갔다.단순 문자열을 자르고 더하면 되는 문제인 줄 알았지..

2024 3월 “벚꽃톤”3월에는 팀빌딩부터 시작해서 해커톤이 있었다.이번 벚꽃톤에서는 기억해봄이라는 서비스를 개발했다.기억해봄은 음성으로 사진에 이야기를 남기는 AI 추억일기 서비스이다. 서버 구조와 데이터베이스 설계, 그리고 주요 API 설계 방식이 알고 싶어요!해커톤이었기 때문에, ERD는 작성하지 않았고, 약식으로 테이블만 설계하고 바로 개발에 들어갔다.인텔리제이에서 제공하는 다이어그램을 가져왔다. 처음 테이블을 설계할 때, 가장 고민했던 부분은 해시태그이다.기능 중 해시태그별로 다이어리를 불러오는 부분이 있기 때문에, 어떻게 하면 더 가독성 있고 좋은 코드가 나올지 고민하며 테이블을 구성했다. 고민 결과 해시태그 테이블과 다이어리 테이블 사이에 중간관계매핑 테이블을 구성하기로 했다.해시태그는 여..

스프링 시큐리티의 어노테이션인 @EnableWebSecurity 어노테이션은 기본적으로 CSRF 공격을 방지하는 기능을 지원한다.그래서 우리는 항상 SecurityConfig 클래스에 csrf를 비활성화한다.@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .csrf(AbstractHttpConfigurer::disable) // csrf 비활성화 ...~ ...~ ...~ .build(); }이때 CSRF가 무엇인지 살펴보자. C..