Programming
-
[JPA] n + 1 문제와 inner join, outer joinProgramming/JPA 2021. 5. 10. 21:56
개요 프로젝트를 진행하던 도중 말로만 듣던 n + 1 문제와 마주하게 되었다. 이에 대한 해결방안으로 공부한 것은 fetch join과 Spring Data JPA 사용 시 @EntityGraph 애노테이션을 활용하는 방법이다. 하지만 두 가지 방법에는 아주 큰 차이가 있었다. 그 둘의 차이점을 알아보기 위해 예시를 작성하였다. 프로젝트 구조 Person.java package me.hyeonic.join.domain; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; import javax.persistence.Entity;..
-
[SpringMVC] 인터셉터(interceptor) 적용 - sessionProgramming/Spring MVC 2021. 4. 22. 19:36
개요 프로젝트를 진행하던 중 개발 중인 가입된 유저만 접근이 가능하도록 제한하기 위한 접근 권한이 필요하였다. Spring에서는 Spring Security와 같이 애플리케이션의 보안을 담당하는 하위 프레임워크가 존재한다. 하지만 워낙 양과 자료가 방대하여 배울 내용이 많았기 때문에 적용하는데 어려움이 많았다. 그렇기 때문에 다른 차선책을 찾아야만 했다. 관련 키워드를 검색하던 중 Spring interceptor에 대하여 알게되었다. interceptor는 말 그대로 무언가를 가로채는 역할을 한다. Interceptor 흐름도 interceptor는 위와 같은 흐름으로 Controller(Handler) 로 가기전에 요청을 가로채는 preHandle, controller 처리 후 postHandle, ..
-
[SpringMVC] ResponseEntity 적용Programming/Spring MVC 2021. 4. 16. 18:13
개요 기존 프로젝트에는 단순히 값을 body에 담아 전달하기 위한 api 서버를 구성하였다. 하지만 프론트 개발자와의 원할한 통신을 위해서는 body 이외에 HTTP의 상태 코드와 헤더 정보를 좀 더 상세하게 조작해야 할 필요성을 느끼게 되었다. @RestController Spring에는 기본적으로 @Controller와 @ResponseBody을 합쳐둔 @RestController 애노테이션으로 인하여 손쉽게 REST API를 구성할 수 있다. 간단한 User의 정보를 가지고 있는 도메인 클래스이다. 밑의 코드는 @RestController가 적용된 controller에 정의한 User 조회 메소드이다. postman을 활용하여 간단하게 확인해보면 Json 형태로 body에 담겨 응답하는 것을 확인할..
-
[JPA] H2의 @GeneratedValue 문제Programming/JPA 2021. 4. 9. 15:47
개요 프로젝트를 진행하던 도중 아직 User 관련된 기능들이 완성되지 않아서 DB에 초기값을 insert하기 위해 웹 서버를 실행하는 시점에 값을 insert 하기로 결정하였다. 필요한 파일과 설정 준비 우선 resources 밑에 값 세팅을 위한 insert를 적어둘 data.sql을 생성하였다. data.sql insert into user (created_date,last_modified_date, email, password, name, provider, user_image_url, entrance_year, graduation_year) values (NOW(), NOW(), 'admin@email.com', '1234', '홍길동', 'KAKAO', '/img', now(), now()); P..
-
[JPA] 왜 JPA의 Entity는 기본 생성자를 가져야 하는가?Programming/JPA 2021. 4. 1. 13:26
왜 JPA의 Entity는 기본 생성자를 가져야 하는가? 정확히 이야기하면 Entity는 반드시 파라미터가 없는 생성자가 있어야 하고, 이것은 public 또는 protected 이어야 한다. 이러한 궁금증을 가지게 된 이유는 setter의 제한을 위해 정적 팩토리 메소드의 도입에서 시작되었다. setter의 제한 Entity의 모든 필드에 public setter 메소드를 생성하는 것은 객체의 값의 변경을 열어두기 때문에 일관성을 보장할 수 없다. 또한 단순히 setter 이기 때문에 그 의도를 쉽게 파악할 수 없다. setter 메소드를 제공하는 것 보단 확실한 비즈니스가 드러나는 메소드를 제공하는 것이 더욱 바람직하다. 간단한 예시를 위하여 학생을 나타내는 Student와 학생의 소속을 나타내는 D..
-
[git, github] Git-flow 정리 및 프로젝트 적용Programming/git, github 2021. 3. 28. 16:31
Git-flow git 브랜치 전략 중 하나이다. 이것은 어떠한 기능을 나타내는 것이 아니라 방법론이다. 각각의 프로젝트와 개발 환경에 따라서 알맞게 수정하여 사용해야 한다. 이 게시글은 git을 알고 사용해 본 경험이 있다는 것을 전제로 작성하였다. 또한 직접 프로젝트에 적용하고 연습하고 있기 때문에 정답이 될 수 없고, 지속적으로 개선할 예정이다. Git Repository 프로젝트에 적용하기 앞서 어떠한 형태로 Git repository가 구성되는지 살펴보았다. Upstream Remote Repository 개발자가 공유하는 저장소로 최신 소스코드가 저장되어 있는 원격 저장소이다. 적용하기 이러한 Remote Repository 생성을 위하여 github에 New organization을 사용하였..
-
[SpringMVC] SpringMVC 구조Programming/Spring MVC 2021. 3. 18. 23:27
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원 www.inflearn.com 이 게시글은 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 듣고 느낀점과 배운 것들을 다시 한 번 각색하여 정리한 것입니다. SpringMVC의 구조 동작순서 1. 핸들러 매핑을 통해 요청한 URL에 매핑된 핸들러(컨트롤러)를 조회한다. 스프링 부트에서는 가장 먼저 @RequestMapping을 활용한 애노테이션 기반의 컨트롤러를 찾아서 사용한다. @Controller는 @Component의 기능 뿐만 ..
-
[git, github] git issue 생성 및 작성 방법 (1)Programming/git, github 2021. 3. 17. 21:49
Issue 이슈는 프로젝트의 작업, 개산 사항 및 버그를 추적하는 좋은 방법으로 사용된다. 프로젝트 기획, 새롭게 추가될 기능, 버그와 수정사항 모든 것을이 이슈라고 할 수 있다. 모든 활동 내역에 대해서 이슈를 등록하고 등록한 이슈를 기반으로 작업을 진행할 수 있다. 실습은 github를 이용하여 진행하였다. https://github.com/hyeonic/github-issue github repository의 Setting 탭에 살펴보면 Features의 Issues 부분에 Set up templates 를 클릭한다. 새롭게 생성한 template을 기반으로 이슈를 등록할 수 있다. 간단한 공통 템플릿 작성을 위해 Custom template를 선택하였다. template 이름과 설명 그리고 tem..