memostack
article thumbnail
Spring @RequestBody, Java 객체에 JSON 데이터를 매핑
Backend/Spring Boot 2021. 5. 17. 21:43

@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...

article thumbnail
Spring @RestController 를 이용하여 REST API 개발
Backend/Spring Boot 2021. 5. 17. 16:59

@Controller 어노테이션을 이용하면 기본적으로 view 페이지를 찾아서 띄어주는 역할을 한다. 하지만 REST API를 개발해야하는 상황이라면 각 메소드마다 @ResponseBody를 붙여서 데이터를 그대로 반환하도록 할 수 있다. (아래 글 참고) 2021.05.17 - [Spring] - @ResponseBody를 이용하여 데이터 반환 @ResponseBody를 이용하여 데이터 반환 보통은 @Controller 어노테이션을 이용하여 Controller 를 생성했을때, (ViewResolver에 의해) return 값으로 반환하는 문자열 이름의 view 페이지를 띄어준다. (아래 예시 코드 참고) 더보기 HelloCotroller.java.. memostack.tistory.com 하지만, 위 ..

article thumbnail
JPA Fetch 종류 (LAZY Fetch와 EAGER Fetch)
Backend/Spring Boot 2021. 3. 27. 17:38

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..

article thumbnail
Spring Boot에서 AOP 구현 (Aspect Oriented Programming)
Backend/Spring Boot 2021. 3. 11. 11:34

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 구현에 집중하기 위해, 단순히..

article thumbnail
Spring Boot 에서 JWT 적용 (Maven 환경)
Backend/Spring Boot 2021. 1. 21. 23:03

dependency 추가 mvnrepository.com/artifact/io.jsonwebtoken/jjwt/0.9.1 ... io.jsonwebtoken jjwt 0.9.1 ... JWT 토큰 생성하기 JwtManager라는 Bean을 생성한다. 공통으로 쓸것이기 때문에 IoC에 담아두고 써도 무관 import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; import java.util.Map; @Component public class JwtManager {..

article thumbnail
SpringBoot, Junit5에서 REST API(Controller) 테스트
Backend/Spring Boot 2021. 1. 15. 12:06

REST API 테스트 Rest API를 테스트할 때는 @WebMvcTest 어노테이션을 사용한다. MockMvc를 생성할때는 MockMvcBuilders를 사용하여 생성한다. 다른 방법으로 MockMvcBuilders를 사용하지 않고, MockMvc에 @Autowired를 사용하여 자동으로 생성하여 주입할 수 있다. @ExtendWith(SpringExtension.class) @WebMvcTest(MemberController.class) @DisplayName("MemberController 테스트") class MemberControllerTest { private MockMvc mvc; @MockBean private MemberService memberService; @BeforeEach pu..

article thumbnail
SpringBoot, Junit5에서 Service 테스트
Backend/Spring Boot 2021. 1. 13. 22:17

서비스 작성 MemberService.java 생성자 주입을 통해, MemberRepository와 BCryptPasswordEncoder를 주입한다. BCryptPasswordEncoder는 시큐리티에 Bean을 생성했다. (아래 펼쳐서 확인) 더보기 @Configuration @EnableWebSecurity @EnableGlobalAuthentication public class SecurityConfig extends WebSecurityConfigurerAdapter { /** * 비밀번호 암호화 인코딩 방식 정의 * * @return BCryptPasswordEncoder BCrypt 단방향 암호화 */ @Bean public BCryptPasswordEncoder passwordEncoder..

article thumbnail
SpringBoot, Junit5에서 JPA Repository 테스트
Backend/Spring Boot 2021. 1. 6. 17:10

사전 준비 테스트를 위해, Entitiy와 Repository를 생성한다. Entity 생성 Role.java @Entity @Table(name = "role") @Getter @Builder @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PROTECTED) @ToString public class Role { // PK @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; // 권한 이름 @Column(nullable = false, length = 50) private String roleName; } Repository 생성 RoleRepository.java ..

article thumbnail
Spring Boot, JPA에서 boolean 처리 (@Converter, @Convert 사용)
Backend/Spring Boot 2021. 1. 5. 15:39

엔티티에서는 java의 boolean을 사용하고, Database에서는 Y 또는 N으로 처리하고 싶을때, @Converter 어노테이션을 사용하여 해결할 수 있다. 컨버터 객체 생성 BooleanToYNConverter.java @Converter public class BooleanToYNConverter implements AttributeConverter { /** * Boolean 값을 Y 또는 N 으로 컨버트 * * @param attribute boolean 값 * @return String true 인 경우 Y 또는 false 인 경우 N */ @Override public String convertToDatabaseColumn(Boolean attribute) { return (attrib..

article thumbnail
Spring Boot 프로젝트에 h2 database 설정
Backend/Spring Boot 2021. 1. 5. 14:54

실행환경 SpringBoot Maven adoptopenjdk1.8 dependency 추가 version 1.4.197을 사용한다. 최근 버전에서는 SpringBoot를 실행하면서 보안상의 이유로 database를 생성하지 못하도록 막아놓아서, 먼저 DB를 생성하고 실행해야하는 번거로움이 있다. 어차피 실제로 서비스할때는 h2 DB는 테스트용으로 사용할 예정이므로, 1.4.197 버전 (예전 버전)을 사용한다. ... com.h2database h2 1.4.197 runtime ... application.yaml 설정 application.properties로 해도 상관없으나, 본 글에서는 yaml 파일로 설정 spring: h2: console: enabled: true datasource: pla..

article thumbnail
Spring Security의 기본 계정 아이디와 비밀번호
Backend/Spring Boot 2020. 12. 15. 22:18

Spring Security를 추가하고 아무런 설정을 안하면, Security가 모든 요청을 가로챈 다음 /login 경로로 리다이렉트한다. 그래서, 아래와 같은 화면이 나온다. Spring Security의 기본 계정 정보 테스트를 위해서 로그인을 해보고 싶다면, 아래계정으로 접속한다. username: user password: (콘솔 창에 나온 비밀번호, 예시: 7aa1e310-2a4b-46a7-85fb-7883d18b72ef)

article thumbnail
Spring Security + JPA + MySQL + Mustache 를 이용한 로그인 구현
Backend/Spring Boot 2020. 12. 3. 15:49

목표 간단한 로그인 기능을 구현 Spring Security 를 사용 JPA와 MySQL을 사용 Mustache 템플릿 엔진 사용 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 Spring Project 생성 start.spring.io/에서 메이븐 프로젝트..

article thumbnail
Spring Boot - REST API를 위한 snake_case 공통 설정
Backend/Spring Boot 2020. 11. 15. 00:38

REST API 규격에 따라 일반적으로 CamelCase가 아닌 snake_case를 사용한다. 각각의 멤버 변수에 @JsonProperty를 적용하여 바꿔줄 수도 있지만, 설정파일을 이용해서 전체 프로젝트에 적용 할 수 도 있다. 방법 1. @JsonProperty 멤버 변수에 @JsonProperty 어노테이션을 붙여서 snake_case로 변경할 수 있다. class User { @JsonProperty("user_id") private String userId; } 방법 2. application.properties (또는 application.yaml) 설정 '방법 1'을 이용하면 매번 변수를 생성 할때마다 어노테이션을 추가해야하는 버거로움이 있다. Spring 설정파일에 spring.jacks..

article thumbnail
JPA 오류 해결 - Unable to locate Attribute with the the given name [Column]
Backend/Spring Boot 2020. 11. 14. 23:21

UserRepository.java 아래 메소드에서 계속 문제가 발생했다. @Repository public interface UserRepository extends JpaRepository { Optional findFirstByPhoneNumberOrderByIdDesc(String phoneNumber); } 에러 내용 java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.example.study.repository.UserRepository.findFirstByPhoneNumberOrderByIdDesc(java.lang.String)! Unable to ..

article thumbnail
Spring Boot 와 MySQL & JPA 연동하기 (Gradle 프로젝트)
Backend/Spring Boot 2020. 11. 11. 21:12

MySQL 설치 설치는 아래 글 참고 2020/10/30 - [Database/RDB] - MySQL 설치하기 (Mac OSX) MySQL 설치하기 (Mac OSX) MySQL 설치 본 글에서는 Homebrew 를 이용하여 MySQL 을 설치한다. $ brew update $ brew install mysql 만약, 특정 버전을 따로 설치하고 싶다면 아래 명령어를 수행한다. 그리고, 원하는 버전의 mysql을 설치한.. memostack.tistory.com 스키마 & 테이블 생성 유저 생성 및 권한 부여 CREATE USER test_user@localhost IDENTIFIED BY '1234'; GRANT ALL PRIVILEGES ON STUDY_DB.* TO test_user@localhost;..

article thumbnail
SpringBoot와 @PostMapping, @RequestBody 예제
Backend/Spring Boot 2020. 11. 11. 20:25

@PostMapping POST 통신을 할때는 @RequestMapping(method=RequestMethod.POST, ...) 를 이용하거나 @PostMapping을 이용한다. @RestController @RequestMapping("api") public class PostController { @RequestMapping(method = RequestMethod.POST, path = "/postMethod") public String postMethod() { return "Hello Spring"; } @PostMapping("/postMethod2") public String postMethod2() { return "Hello Spring"; } } @RequestBody 만약, 함께 ..

article thumbnail
Spring Boot와 @RequestMapping, @GetMapping, @RequestParam 예제
Backend/Spring Boot 2020. 11. 11. 19:57

예제를 위해 간단한 Spring Boot 프로젝트를 생성한다. 2020/02/18 - [Spring/Spring Boot] - Spring Boot 프로젝트 생성하기 Spring Boot 프로젝트 생성하기 스프링 부트 프로젝트 생성 스프링 부트 프로젝트를 생성 할 수 있게 도와주는 사이트가 있다. (https://start.spring.io) 위와 같이 원하는 Version , Metadata , Dependency 를 정하여 프로젝트를 구성한다. Ge.. memostack.tistory.com Controller 생성 Controller를 하나 생성한다. 생성할때는 @RestController를 이용한다. @RestController // REST API Controller 사용한다는 것을 프레임워크에..

article thumbnail
Spring Boot 와 MySQL 연동하기 (Maven 프로젝트)
Backend/Spring Boot 2020. 10. 31. 22:35

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..

article thumbnail
Spring Boot 에서 JPA 사용하기 (MySQL 사용)
Backend/Spring Boot 2020. 10. 31. 21:52

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..

article thumbnail
Spring Boot, Maven 프로젝트에 롬복 적용하기
Backend/Spring Boot 2020. 10. 31. 20:12

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..