로그인 인증 게시 글 목록을 회원만 조회하기 위해서는 접근하는 사용자가 데이터베이스 Member 테이블에 있는 사용자인지 확인을 하는 과정을 거쳐야합니다. 이를 위한 비즈니스 컴포넌트를 만든 후, LoginController을 작성해줍시다. Repository와 Service 인터페이스 및 구현에 대한 코드는 생략하도록 하겠습니다. @SessionAttributes("member") @Controller public class LoginController { @Autowired private MemberService memberService; @GetMapping("/login") public void loginView() { } @PostMapping("/login") public String logi..
Querydsl 웹 애플리케이션에서 SQL은 개발/운용과정에서 수시로 바뀌게 됩니다. 다양한 검색쿼리를 미리 저장해서 사용하면 비슷한 쿼리들이 많아 관리하기가 어렵습니다. 이를 해결하기 위해 마이바티스에서는 동적 쿼리를 제공합니다. JPA에서는 @Query로 쿼리들을 관리하게 되는데 프로젝트를 로딩하는 시점에서 SQL들이 파싱되어 정적 SQL만 사용가능합니다. 따라서 동적쿼리를 이용하기 위해선 Querydsl을 사용해야합니다. Querydsl을 사용하기 위해 querydsl-apt 와 querydsl-jpa를 추가한 후 버전정보를 삭제해주도록 합시다. 버전을 명시할 경우 스프링부트에서 참조하는 querydsl과 명시한 버전이 맞지 않으면 오류가 발생할 수 있습니다.(https://devbelly.tist..
Repository 스프링 데이터 JPA를 테스트하기 위해 새로운 프로젝트를 만든 후 엔티티 클래스를 작성하도록 합시다. 그 다음으로 Repository 인터페이스를 작성해야하는데 비즈니스 클래스에서는 Repository 인터페이스를 이용하여 실질적인 데이터베이스 연동작업을 하게 됩니다. Repository 인터페이스는 스프링에서 제공하는 네 개의 인터페이스중 하나를 선택하여 사용하면 됩니다. 위 세 개는 스프링 데이터 모듈, 아래 JpaRepsitory는 스프링 데이터 JPA에서 제공하는 인터페이스입니다. 인터페이스들은 공통적으로 두 개의 제네릭 타입을 지정하게 됩니다. 첫 번째는 매핑할 엔티티 클래스를 적고 두 번째는 해당 엔티티의 Id 타입을 적게 됩니다. 일반적으로 인터페이스는 구현할 클래스를 작..
영속성 컨텍스트 영속성 컨텍스트는 EntityManager을 생성할 때 같이 생성되는 논리적인 개념입니다. 일종의 엔티티 객체들을 담는 컨테이너라고 이해하면 됩니다. 컨텍스트와 엔티티 사이에 네가지 상태가 있을 수 있습니다. 비영속(new) 엔티티를 생성만 했을 뿐, 아직 영속성 컨텍스트에 저장하지 않은 상태입니다. 영속(managed) EntityManager을 통해 엔티티가 영속성 컨텍스트에 등록된 상태를 의미합니다. 엔티티를 영속 상태로 만들기 위해 persist 메서드를 사용합니다. find를 통해서도 엔티티를 영속 상태로 만들 수 있습니다. 찾고자 하는 엔티티가 영속성 컨텍스트안에 존재하지 않는다면 데이터베이스에 접근해 데이터를 얻어온 후 해당 정보를 토대로 엔티티 객체를 만든 후 영속성 컨텍스..
데이터베이스 연동 데이터베이스 연동에 사용되는 기술은 JDBC, 마이바티스, 하이버네이트와 같은 ORM에 이르기까지 매우 다양합니다. 특히 하이버네이트 같은 경우는 개발자가 직접 SQL을 작성하지 않아도 된다는 점에서 굉장히 편리합니다. 이후 여러 ORM이 등장하고 이를 표준화 한것이 JPA 입니다. 스프링 데이터 JPA는 복잡한 JPA를 간단하게 사용할 수 있게 해주는 스프링 모듈입니다. 연동 기술은 크게 SQL을 직접 다루는 기술과 프레임 워크가 SQL을 생성해주는 기술로 나눌 수 있습니다. 마이바티스는 SQL을 XML 파일에 직접 저장하여 사용하게 됩니다. 만일 추가적인 기능이 필요해 SQL을 수정하게 된다면 해당 SQL을 사용하는 코드또한 수정되어 번거롭습니다. 하지만 SQL을 직접 다루지 않는 ..
스프링 부트 로깅 애플리케이션을 운용하며 문제가 발생하면 로그 메세지를 보게 됩니다. 에러가 발생할때 뿐만 아니라 애플리케이션의 성능을 분석하는데에도 쓰는 등 다양한 용도로 사용됩니다. 마켓플레이스에서 ANSI Esacpe in Console을 설치하여 메인함수를 실행하면 로그 레벨별로 색깔이 구분되어 표기됩니다. Level Color 의미 1. ERROR Red 사용자 요청을 처리하는 중 문제 발생 2. WARN Yellow 현재는 처리가능, 향후 문제가능성 존재 3. INFO Green 상태변경과 같은 정보성 메세지 4. DEBUG Green 개발 시 디버깅 목적 5. TRACE Green DEBUG 레벨보다 더 상세한 메세지 로그 레벨은 우선순위가 정해져 있어 특정 로그 레벨을 지정하면 해당 레벨을..
스프링부트 테스트 웹 애플리케이션에서 개발자가 만든 컨트롤러가 정상적으로 동작하기 위해서는 서블릿 컨테이너가 구동되어야하고 브라우저를 통해 요청/응답 결과를 확인해야합니다. 하지만 컨트롤러가 수정될때마다 이러한 수행을 할 수 없기에 JUnit 기반의 단위테스트를 통해 컨트롤러를 검증하게 됩니다. 이를 위해 JUnit은 서버를 구동하지 않고 컨트롤러를 테스트하거나 컨트롤러와 연관된 비즈니스 컴포넌트를 실행하지 않고 컨트롤러를 독립적으로 테스트할 수 있어야합니다. 기존에 작성한 BoardController의 검증을 위해 다음과 같은 테스트케이스를 작성했습니다. package com.rubypaper; import org.junit.Test; import org.junit.runner.RunWith; impo..
스타터 이해하기 스프링부트는 복잡한 라이브러리 관련 설정을 위해 스타터를 사용합니다. 스타터는 실행에 필요한 라이브러리들을 관련된 것끼리 묶어서 제공합니다. 만일 데이터베이스 연동을 위해 JPA 라이브러리만 다음과 같이 추가했다고 해봅시다. org.hibernate hibernate-entitymanager 5.4.32.Final 하지만 JPA와 연동하기 위해서는 하이버네이트말고도 spring-orm.jar 과 spring-data-jpa.jar와 같은 라이브러리가 추가적으로 필요합니다. 이러한 문제를 해결하기 위해 스프링부트는 관련된 라이브러리를 묶어 스타터로 제공합니다. org.springframework.boot spring-boot-starter-data-jpa POM파일 상속구조 스타터에는 ve..
- Total
- Today
- Yesterday
- 트라이
- union find
- implementation
- spring
- knapsack
- DP
- greedy
- string
- 이분탐색
- Fenwick
- 좌표압축
- hld
- dijkstra
- Suffix Array
- 동적계획법
- kmp
- sorting
- 2-SAT
- dfs
- Segment tree
- SCC
- 이분매칭
- 스위핑
- spring boot
- bfs
- 정렬
- Oracle
- 펜윅트리
- sweeping
- 세그먼트트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |