@RequestBody @RequestBody 는 JSON 형태의 데이터를 Java 객체에 매핑할때 사용하는 어노테이션이다. 예를 들어 아래와 같이 '공지 사항'과 관련된 글쓰기 API를 만들었다고 했을때, 비즈니스 로직은 생략 (입력받은 값 그대로 반환하도록 함) NoticeVo.java @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor public class NoticeVo { private int id; // ID private String title; // 제목 private String contents; // 컨텐츠 private LocalDateTime registeredAt; // 등록일 } ApiNoticeController...
@Controller 어노테이션을 이용하면 기본적으로 view 페이지를 찾아서 띄어주는 역할을 한다. 하지만 REST API를 개발해야하는 상황이라면 각 메소드마다 @ResponseBody를 붙여서 데이터를 그대로 반환하도록 할 수 있다. (아래 글 참고) 2021.05.17 - [Spring] - @ResponseBody를 이용하여 데이터 반환 @ResponseBody를 이용하여 데이터 반환 보통은 @Controller 어노테이션을 이용하여 Controller 를 생성했을때, (ViewResolver에 의해) return 값으로 반환하는 문자열 이름의 view 페이지를 띄어준다. (아래 예시 코드 참고) 더보기 HelloCotroller.java.. memostack.tistory.com 하지만, 위 ..
보통은 @Controller 어노테이션을 이용하여 Controller를 생성했을때, (ViewResolver에 의해) return 값으로 반환하는 문자열 이름의 view 페이지를 띄어준다. (아래 예시 코드 참고) 더보기 HelloCotroller.java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public..
JPA의 Fetch Fetch는 Entity를 조회할때, 그 Entity와 연관관계가 있는 다른 Entity의 정보를 어느 시점에 가지고 오는지 결정해준다. Fetch의 타입은 2가지가 있다. LAZY Fetch Type EAGER Fetch Type LAZY Fetch Type (지연 로딩) Lazy는 '게으른'이란 뜻을 가지며, 사전 의미처럼 LAZY Fetch 타입은 실제로 엔티티 조회시에 바로 가지고 오지 않고, 연관 관계에 있는 엔티티를 참조할때 그때 가지고 온다. 예를들어, 사용자(User) 와 사용자 권한(Role) 정보를 담은 Entitiy가 있고, 2개의 Entity는 서로 1:1 관계를 이룬다고 하자 테스트 코드 @Entity @Table(name = "user") @Getter @Bu..
AOP 구현 AOP 개념은 아래 글 참고 2021.03.11 - [Spring] - Spring의 AOP 개념 (Aspect Oriented Programming) Spring의 AOP (Aspect Oriented Programming) AOP AOP는 Aspect Oriented Programming 의 약자로, 번역하면 관점 지향 프로그래밍이다. AOP는 주 비지니스 로직 앞, 뒤로 부가적인 기능을 추가하고 싶을때 사용하는데 예를들어, 로그처리, 보안처리, DB memostack.tistory.com 의존성 추가 org.springframework.boot spring-boot-starter-aop 서비스(비즈니스 로직) 구현 테스트를 위한 비즈니스 로직을 구현 AOP 구현에 집중하기 위해, 단순히..
AOP AOP는 Aspect Oriented Programming의 약자로, 번역하면 관점 지향 프로그래밍이다. AOP는 주 비지니스 로직 앞, 뒤로 부가적인 기능을 추가하고 싶을때 사용하는데 예를들어, 로그처리, 보안처리, DB 트랜잭션 처리 등이 있다 관점을 횡단으로 바꿔서 바라보는 것을 횡단 관심 사항이라 하며, 부가적인 로직을 Cross Cutting Concern, 주 비즈니스 로직을 Core Concern 이라 한다. AOP를 사용하는 이유? 코드의 중복을 줄일 수 있다. 주 업무 로직과 부가적인 로직을 분리할 수 있다. Java로 AOP 구현 AOP는 디자인 패턴 중 프록시 패턴(Proxy Pattern)을 이용해서 구현할 수 있다. 스프링에서는 어노테이션으로 더 쉽게 구현할 수 있음 성능 ..
IoC (Inversion of Control) IoC는 Inversion of Control의 약자로 한국어로 번역하는 '제어의 반전' 이라는 뜻을 가짐 재사용 라이브러리의 흐름이 반대라고 말할 수 있음 내용을 살펴보기 전에 DI(Dependency Injection)을 알고 있으면 이해하기 쉽다. 2021.03.10 - [Spring] - Spring의 DI 개념 (Dependency Injection) Spring의 DI 개념 (Dependency Injection) 객체를 생성하는 2가지 방법 객체를 생성하는 방법에는 2가지가 방법이 있다. 필요한 곳에 직접 생성하는 방법 외부에서 미리 생성해두고 필요한 곳에 할당(주입)하는 방법 위 그림은 직접 객체 memostack.tistory.com 아래 ..
객체를 생성하는 2가지 방법 객체를 생성하는 방법에는 2가지가 방법이 있다. 필요한 곳에 직접 생성하는 방법 외부에서 미리 생성해두고 필요한 곳에 할당(주입)하는 방법 위 그림은 직접 객체 생성하는 경우, 외부에서 객체 주입하는 경우를 그림으로 표현했다. 이름과 나이를 받는 Member 객체와 그 객체를 사용하는 MemberUse 클래스를 표현함 직접 객체를 생성하는 경우 위 그림에서 만약 1년이 지나 '홍길동'이 29살에서 30살이 되었다고 했을때, 모든 객체를 다 수정해줘야하는 번거로움이 있다. // Member public class Member { private String name; private int age; public Member(String name, int age) { this.nam..
Spring Security를 추가하고 아무런 설정을 안하면, Security가 모든 요청을 가로챈 다음 /login 경로로 리다이렉트한다. 그래서, 아래와 같은 화면이 나온다. Spring Security의 기본 계정 정보 테스트를 위해서 로그인을 해보고 싶다면, 아래계정으로 접속한다. username: user password: (콘솔 창에 나온 비밀번호, 예시: 7aa1e310-2a4b-46a7-85fb-7883d18b72ef)
Gradle 내용은 아래 참고 2020/11/11 - [Spring/Spring Boot] - Spring Boot 와 MySQL & JPA 연동하기 (Gradle 프로젝트) Spring Boot 와 MySQL & JPA 연동하기 (Gradle 프로젝트) MySQL 설치 설치는 아래 글 참고 2020/10/30 - [Database/RDB] - MySQL 설치하기 (Mac OSX) MySQL 설치하기 (Mac OSX) MySQL 설치 본 글에서는 Homebrew 를 이용하여 MySQL 을 설치한다. $ brew update $ brew ins.. memostack.tistory.com 의존성 추가 아래와 같이 java와 mysql 커넥터 의존성을 pom.xml에 추가한다. mysql mysql-conne..
MySQL 설정 MySQL 설치 MySQL 설치는 아래 글 참고 2020/10/30 - [Database/RDB] - MySQL 설치하기 (Mac OSX) MySQL 설치하기 (Mac OSX) MySQL 설치 본 글에서는 Homebrew 를 이용하여 MySQL 을 설치한다. $ brew update $ brew install mysql 만약, 특정 버전을 따로 설치하고 싶다면 아래 명령어를 수행한다. 그리고, 원하는 버전의 mysql을 설치한.. memostack.tistory.com 데이터베이스 생성 우선 예제에서 사용할 데이터 베이스 및 테이블을 생성한다. 본 글에서는 TEST_DB를 생성한다. mysql> CREATE DATABASE TEST_DB -> DEFAULT CHARACTER SET UTF..
Gradle 프로젝트에 롬복 적용하는 방법은 아래 글 참고 2020/03/07 - [Spring/Spring Boot] - Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용 Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용 롬복(Lombok) 이란? 롬복(lombok)을 이용하면 getter, setter, constructor 를 매번 생성할 필요가 없다. 롬복은 @Getter, @Setter, @NoArgsConstructor 등등 어노테이션을 추가해주는 것으로 접근 제어자, 생성자.. memostack.tistory.com pom.xml에 롬복 추가 아래 dependancy를 추가한다. ... org.projectlombok l..
dependency 추가 REST API 기능을 만들기 위해서는 spring-boot-starter-web 디펜던시가 필요하다. pom.xml에 아래 코드를 추가한다. ... org.springframework.boot spring-boot-starter-web ... 참고. mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web Maven Repository: org.springframework.boot » spring-boot-starter-web Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the def..
Spring Boot 서버 포트 변경 Spring Boot에서 서버 포트를 변경하는 방법은 매우 쉽다. src/main/resources/application.properties 파일에 아래 설정값을 넣어준다. server.port=8080 처음 default값은 8080이기 때문에 8080을 사용할 때는 굳이 작성하지 않아도 된다. 만약 9000으로 실행하고 싶다면 아래처럼 설정한다. server.port=9000