일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 비즈니스 계층
- 로그인 인증 흐름
- 퍼시스턴스 계층
- 스프링부트 구조
- 스프링 부트 테스트
- 스프링
- 토큰기반 인증
- formmatted
- spring
- ./gr
- ./gradlew docker
- Java
- IPC
- 작업명중복
- @temproal
- 동기
- MSA
- RESTfull API
- http
- java I/O
- 어노테이션
- 비동기
- 세션기반 인증
- 프레젠테이션 계층
- 로그인/로그아웃
- JPA
- 스프링부트 계층구조
- 스프링부트
- JWT
- ORM
- Today
- Total
목록Back-end/Spring (23)
[DEV] J-Jay
@Temproal JPA를 사용시, 엔티티의 날짜에서 사용되는 어노테이션이다. 자바는 보통 java.util.Date 객체를 사용하지만, DB는 날짜도 여러 형태가 존재한다.예를 들어, date(년월일), time(시분초), timestamp(년월일 시분초) 또는 datetime 등의 타입등이다. 따라서, @Temporal이라는 어노테이션을 사용하여, DB 타입에 맞도록 매핑할 수 있다. TemporalType.Date : 년-월-일 의 date 타입TemporalType.Time : 시:분:초 의 time 타입TemporalType.TIMESTAMP : date + time 의 timestamp(datetime) 타입 어노테이션을 사용하지 않을 경우 기본값은 timestam..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bLcb2u/btstykWOcyY/yQBzYmmYakOxVKnbWpWTsK/img.png)
JWT(JSON Web Token) 구현 build.gradle 의존성 추가 dependencies { //자바 JWT 라이브러리 implementation 'io.jsonwebtoken:jjwt:0.9.1' //XML 문서와 Java 객체간 매핑을 자동화 시켜주는 api implementation 'javax.xml.bind:jaxb-api:2.3.1' } 토큰 제공자 추가 JWT 토큰을 만들려면 발급자, 비밀키를 필수로 설정해야한다. application.yml jwt: issuer: j-jay secret_key: springboot-blog JwtProperties.java @Setter @Getter @Component @ConfigurationProperties("jwt") public cla..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bQDhyx/btsts0kXEeJ/k4rOFhSUQV9x83JF3MQmu0/img.png)
스프링 시큐리티 설정 build.gradle (의존성 추가) dependencies { //스프링 시큐리티를 사용하기 위한 스타터 의존성 implementation 'org.springframework.boot:spring-boot-starter-security' //타임리프에서 스프링 시큐리티를 사용하기 위한 의존성 implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6' //스프링 시큐리티를 테스트하기 위한 의존성 testImplementation 'org.springframework.security:spring-security-test' } 스프링 시큐리티를 사용하기 위해 build.gradle파일에 의존성을 위와 같이 추가한다...
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b6rwnj/btstzwJdHvD/HY6XqYsZ2aknwXJf0lBl7K/img.png)
스프링 시큐리티(Spring Security) 스프링 시큐리티는 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크이다. 보안 관련 옵션을 제공하며, 어노테이션으로 설정하무로 매우 쉽게 사용할 수 있다. CSRF(Cross Site Request Forgery 사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격)이나, 세션 공격(Session Fixation 사용자의 인증 정보를 탈취하거나 변조하는 공격)을 방어해 주고 요청 헤더도 보안 처리를 해주므로 개발자가 보안 관련 개발을 해야하는 부담을 크게 줄여준다. 필터 기반으로 동작하는 스프링 시큐리티 스프링 시큐리티는 필터 기반으로 동작한다. 스프링 시큐리티는 위와 같이 다양한 필터들로 나누어져 있으며, 각 필터에서 인증,. 인가와..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bqexpO/btstcPKMA42/Ip1zskHWGZw3vecDngpNXk/img.png)
기능1. 블로그 글 목록 조회 ArticleListViewResponse.java @Getter public class ArticleListViewResponse { private final Long id; private final String title; private final String content; public ArticleListViewResponse(Article article) { this.id = article.getId(); this.title = article.getTitle(); this.content = article.getContent(); } } BlogViewController.java @RequiredArgsConstructor @Controller public class..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/5imQl/btstkuFrSWu/joKXRLw9oJDNehdk8YULfK/img.png)
Thymeleaf 타임리프 타임리프는 템플릿 엔진이다. 템플릿 엔진이란 스프링 서버에서 데이터를 받아 우리가 보는 웹 페이지, HTML 상에 데이터를 넣어 보여주는 도구이다. 템플릿 엔진 개념 h1 태그에는 ${성명}이 text 어트리뷰로 할당되어 있다. p 태그 역시 ${나이} 어트리뷰트로 되어있다. 이것이 바로 템플릿 문법이다. 이렇게 해 두면 서버에서 성명, 나이라는 키로 데이터를 템플릿 엔진에 넘겨주고 템플릿 엔지는 이를 받아 HTMl에 값을 적용한다. { 성명 : "J-Jay" 나이 : 19 } 값이 달라지면 그때 그때 화면에 반영하니 동적인 웹 페이지를 만들 수 있게 된다. 템플릿 엔진은 각각 문법이 미묘하게 달라 템플릿 엔진마다 문법을 새로 배워야 하나, 대부분의 구조는 비슷하여 한 번 배워..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Nb5tp/btss3WicWHv/qZOhmtPKNu98LzNEVCwGnK/img.png)
프로젝트 소개 프로젝트 나만의 Blog 만들기 기능 블로그 글 작성 블로그 글 조회(단건 조회/전체 조회) 블로그 글 삭제 블로그 글 수정 기술 Spring Boot Spring Data JPA Lombok H2 build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lomb..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/zoJYh/btss3K13tA1/YVFKn8jkZWE5n0UrWwDB6k/img.png)
스프링 데이터 스프링 데이터는 비즈니스 로직에 더 집중할 수 있게 데이터베이스 사용 기능을 클래스 레벨에 추상화 한다. 스프링 데이터에서 제공하는 인터페이스를 통해 스프링 데이터를 사용할 수 있다. 이 인터페이스에서는 CRUD를 포함한 여러 메서드가 포함되어 있으며, 알아서 쿼리를 생성해준다. 추가로 페이징 처리 기능과 메서드 이름으로 자동으로 쿼리 빌딩하는 기능, 각 데이터베이스의 특성에 맞춰 기능을 확장해 제공하는 기술도 제공한다. 스프링 데이터 JPA 스프링 데이터 JPA는 스프링 데이터의 공통적인 기능에서 JPA의 유용한 기술이 추가된 것이다. 스프링 데이터 JPA에서는 스프링 데이터의 인터페이스인 PagingAndSortingRepository를 상속받아 JpaRepository 인터페이스를 만..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/LQAhA/btssVWoq4gi/i0Kb8AWtlOrrR8T0qKOJg1/img.png)
ORM(Object-relational mapping) ORM은 자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법이다. 예를 들어 데이터베이스에 나이(age)와 성명(name) 컬럼에 20, J-Jay 라는 값이 들어있다고 보고, 이것을 자바에서 사용하려면 어떻게 해야 할까? 보통은 아래처럼 SQL이라는 언어로 데이터를 꺼내 사용을 한다. SELECT age , name FROM EMP 하지만 ORM이 있다면 데이터베이스의 값을 마치 객체처럼 사용이 가능하다. 쉽게 말해 SQL을 전혀 몰라도 자바 언어로만 데이터베이스에 접근해서 원하는 데이터를 받아올 수 있다. 즉, 객체와 데이터베이스를 연결해 자바 언어로만 데이터베이스를 다룰 수 있게 하는 도구를 ORM이라고 한다. ORM의 장점과 단점 장점 단점..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/d3qNMX/btssSqRIEZv/Cqa3i8OwqEM6NO8rWPoUfK/img.png)
테스트 코드 작성 @SpringBootTest //테스트용 애플리케이션 컨텍스트 생성 @AutoConfigureMockMvc // MockMvc 생성 class TestControllerTest { @Autowired protected MockMvc mockMvc; @Autowired private WebApplicationContext context; @Autowired private MemberRepository memberRepository; @BeforeEach //테스트 실행 전 실행하는 메서드 public void mockMvcSetUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); } @AfterEach //테..