본문 바로가기

Spring25

[Spring JPA] JPA 엔티티 매핑(Entity Mapping) 이번 글에서는 JPA를 사용하여 DB Table과 Entity매핑에 대해서 알아보도록하자. Entity는 그냥 간단히 JPA가 관리하는 Class 정도로 인식하면된다. Class의 필드와 Table의 컬럼을 매핑하고 객체와 테이블을 매핑하는 과정에 대해서 알아보도록 하자. JPA에서는 대표적으로 아래의 어노테이션을 사용한다. 객체와 테이블 매핑: @Entity , @Table 기본 키 매핑: @Id 필드와 컬럼 매핑: @Column 연관관계 매핑: @ManyToOne , @JoinColumn 우선 객체와 테이블을 매핑하는 @Entity 어노테이션을 알아보도록하자. 1. @Entity 테이블과 매핑할 클래스에는 @Entity 어노테이션인 반드시 명시되어야한다. @Entity 어노테이션에 적용할 수 있는 속.. 2021. 3. 24.
[Spring Error] There is no PasswordEncoder mapped for the id "null" Spring Security를 이용해서 회원가입을 하고 로그인을 하려고보니 아래와 같은 에러가 발생했다. 이유를 확인해보니 Spring Security 버전 5 이상부터는 PasswordEncoder가 변경되었기 때문에 회원정보 저장시에 password앞에 암호화 정보를 같이 지정해서 저장해야하기 때문이다. # 암호화 명시 방식 {암호화 명}실제 비밀번호 # 기존 패스워드 1234 # 암호화 방식을 명시한 패스워드 {noop}1234 위처럼 암호화 방식을 명시한 후에 코드를 적용해보도록하자. 아래의 코드는 회원을 생성하는 Service 로직인데, 이를 변경해보도록 하자. # AS-IS public Member createMember(MemberDto memberDto) { return memberRepo.. 2021. 3. 21.
[Spring JPA] JPA 란? 이번 글에서는 JPA(Java Persistence API)가 무엇인지 알아보려고한다. JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 그 말은 즉, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다. 우선 JPA에 앞서, 먼저 ORM에 대해 알아보도록하자. ORM(Object-Relational Mapping) 우리가 일반 적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고.. 2021. 3. 18.
[SpringBoot] TimeZone 설정 후 출력하기 현재 사용자들에게 서비스하고 있는 프로젝트가 있다고 치자, 이 프로젝트를 다른 국가에 런칭해야 하는 상황 이라면? 당연히 현지에 있는 시간에 맞춰서 사용자에게 시간을 제공해줘야한다. 이럴 때, 사용하는것이 TimeZone 설정이다. 이번 글에서는 스프링부트에서 타임존을 어떻게 설정하고 어떤식으로 출력해서 사용하는지 알아보도록하자. 1. TestCode로 확인하기 우선 테스트케이스에서 타임존설정을 해서 국제표준시간과 한국시간을 출력해서 설정해 따라 결과가 달라지는 것을 보도록하자. @RunWith(SpringRunner.class) @SpringBootTest public class TimeZoneTest { @Test public void queryFilterForActionLogBotTest() { T.. 2021. 2. 3.
[Spring] IntelliJ 에서 queryDSL 의 Q 도메인을 찾지 못할때 https://blusky10.tistory.com/275IntelliJ 에서 queryDSL 의 Q 도메인을 찾지 못할때 2020. 8. 23.
[SpringBoot] Spring Boot Scheduler(Cron) 사용방법 이번 글에서는 Spring Boot에서 설정한 시간마다 특정 동작을 하는 Scheduler 사용법에 대해 알아보도록하자 우선 매시간마다 특정 동작을 한다고하였는데, 동작을 실시하는 시간을 설정하는 문자열 방식을 살펴보자. 실행주기를 설정하는 문자열은 6개의 숫자, 문자, * 등으로 이루어져있다 1 2 3 4 5 6 // 순서 * * * * * * // 실행주기 문자열 // 순서별 정리 1. 초(0-59) 2. 분(0-59) 3. 시간(0-23) 4. 일(1-31) 5. 월(1-12) 6. 요일(0-7) 위와 같이 각 순서에 맞는 시간 설정 값이 있고, 예를 들어 살펴보도록하자. "0 0 * * * *" = the top of every hour of every day. "*/10 * * * * *" = .. 2020. 7. 25.
[Spring] ResourceLoader 이번 글에서는 ApplicationContext의 마지막 기능인 ResourceLoader에 대해서 알아보도록하자. ResourceLoader라는 것은 이름 그대로 Resource 를 로딩해주는 인터페이스이다. 이 인터페이스를 ApplicationContext가 상속 받고 있기 때문에 ApplicationContext 객체를 통해 Resource 로딩기능도 사용할 수 있다. 아래의 코드를 보도록하자. AppRunner.java @Component public class AppRunner implements ApplicationRunner { @Autowired ResourceLoader resourceLoader; public void run(ApplicationArguments args) throws .. 2020. 5. 17.
[Spring] ApplicationEventPublisher 이번 글에서는 옵저버 패턴의 구현체로 이벤트 기반의 프로그래밍을 할때 유용한인터페이스인 ApplicationEventPublisher에 대해 알아보도록 하자. 여기서 말하는 옵저버 패턴을 간략하게 실생활에 빗대어 표현하면, 스마트폰에 날씨 어플리케이션이 저장되어 있다고 가정하자. 이 어플리케이션은 기상청의 데이터를 수시로 읽어서 스마트폰을 사용하는 사용자에게 푸쉬알람, 진동등을 통해서 어떠한 상황변화를 전달할 수 있다. 프로그래밍에서 이 상황을 설명한다면, 상태를 가진 객체가 기상(날씨)가 되는것이고 기상(날씨)를 관찰하는 기상청의 컴퓨터 또는 기상청의 직원을 말할 수 있다. 여기서 Observer(보는사람, 목격자)가 기상청의 컴퓨터 또는 직원을 말한다. 어떠한 상태를 가지는 객체 A와 A의 상태를 관.. 2020. 5. 15.
[Spring] MessageSource 이번 글에서는 ApplicationContext에서 다국화(i18n)을 담당하는 MessageSource 인터페이스에 대해 배워보자. 다국화(i18n) 란, 설정 값에 따라 각국의 언어로 변화시켜서 제공하는 것을 말한다. 제공하는 서비스가 우리나라뿐 아니라 세계적으로 사용되는 경우가 있다. 대표적으로 "Line" 이라는 어플리케이션이 있는데, 세계 각국의 사람들이 이용하는 대표적인 서비스인 만큼 각 나라의 언어에 맞게 노출되는 문구가 달라야 하는게 당연하다. 만약 각국의 언어로 제공하기 위해 각나라마다 새로운 프로젝트를 생성하거나 복잡한 코드로 제공한다면, 상당히 비효율적인 방식이다. 이때, 필요한 것이 바로 다국화(i18n) 이다. ApplicationContext의 MessageSource를 이용하면.. 2020. 1. 18.