전체 글

전체 글

    [JPA] N+1 문제 및 해결 방안

    [JPA] N+1 문제 및 해결 방안

    N+1이란? 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수 N번 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어와 서버와 데이터의 접촉이 N번 발생하는 현상이다. 예시로 게시물과 해시태그를 예시로 들어 확인해본다. 가정 한 게시물에는 여러개의 해시태그를 들 수 있다. 해시태그는 한 게시물에만 속한다. @Entity @Getter @Setter @NoArgsConstructor public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "board_id") private Long id; private String content; @OneToMany(mappedBy = "boa..

    프로젝트 회고 [플랩업]

    프로젝트 회고 [플랩업]

    개발기간 2022.06 ~ 2022.09 (3개월) 플랫폼 Android 담당역할 유저 (로그인, 수정, 보안) 개발, CICD(Docker, DockerHub, Jenkins) 파이프라인 구축 infra 서버 구축, NCP이용한 SMS 문자 인증 패키지 구조 설정, Exception Handler구성 이번 앱런칭은 방학기간에 사이드 프로젝트를 진행하고싶어 지인들로 구성하여 앱런칭을 진행하였다. 이번 앱런칭에 회고를 작성한다. 회고 첫째, 코드리뷰의 부재 기술 발전에 큰 도움이 된 것은 '집단지성'이라고 생각한다. 코드리뷰는 집단지성을 극대화 할 수 있다. 하지만, 각각의 팀원은 사이드 프로젝트이기에 투자할 수 있는 시간은 모두가 달랐다. 그렇기에 코드리뷰를 진행하게 되면 누군가에게 업무가 몰리는 현상이..

    [Network] HTTP 상태코드

    [Network] HTTP 상태코드

    상태코드 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx(Informational): 요청이 수신되어 처리 중을 의미한다. 2xx(Successful): 요청 정상 처리한다. 3xx(Refirection): 요청을 완료하려면 추가 행동이 필요하다. 4xx(Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없다. 5xx(Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못한다. 미래에 새로운 상태 코드가 추가되어도 클라이언트를 변경하지 않아도 된다. 299 -> 2xx(Successful) 451 -> 4xx(Client Error) 599 -> 5xx(Server Error) 2xx(Sucessful) - 클라이언트의 요청을 성공..

    [Network] HTTP 메서드 활용

    [Network] HTTP 메서드 활용

    클라이언트에서 서버로 데이터 전송 데이터 전달 방식은 크게 2가지이다. 1. 쿼리 파라미터를 통한 데이터 전송 GET, 정렬 필터로 주로 검색어에 사용된다. 2. 메시지 바디를 통한 데이터 전송 POST, PUT, PATCH 회원 가입, 상품 주문, 리소스 등록, 리소스 변경 4가지 상황 1. 정적 데이터 조회 이미지, 정적 텍스트 문서 2. 동적 데이터 조회 주로 검색, 게시판 목록에서 정렬 필터로 쓰인다. 3. HTML FORM을 통한 데이터 전송 회원 가입, 상품 주문, 데이터 변경에 쓰인다. 4. HTTP API를 통한 데이터 전송 회원가입, 상품 주문, 데이터 변경 서버 to 서버, 앱 클라이언트, 웹 클라이언트(Ajax) 정적 데이터 조회의 경우(쿼리 파라미터 미사용) 이미지, 정적 텍스트 문..

    [Network] HTTP Method(GET, POST, PUT, PATCH, DELETE)

    [Network] HTTP Method(GET, POST, PUT, PATCH, DELETE)

    URI 설계의 중요한 것은 리소스 식별 API URI(Uniform Resource Identifier) 리소스의 의미 회원을 등록하고 수정하고 조회하는 것은 리소스가 아니다. 예를들어 자원을 캐라 -> 자원이 리소스이다. 회원이라는 개념 자체가 바로 리소스인 것이다. 회원이라는 리소스만 식별하면 된다. -> 회원 리소스를 URI에 매핑하면 된다. 좋지 못한 URI설계 - 회원 목록 조회 /read-member-list - 회원 조회 /read-member-by-id - 회원 등록 /create-member - 회원 수정 /update-member - 회원 삭제 /delete-member 좋은 URI 설계 - 회원 목록 조회 /members - 회원 조회 /members/{id} - 회원 등록 /memb..