일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ./gr
- 동기
- IPC
- Java
- 스프링
- 스프링부트 계층구조
- 스프링부트 구조
- ./gradlew docker
- JPA
- 어노테이션
- 로그인 인증 흐름
- http
- 비즈니스 계층
- 작업명중복
- spring
- 퍼시스턴스 계층
- MSA
- 로그인/로그아웃
- RESTfull API
- java I/O
- 세션기반 인증
- 비동기
- @temproal
- formmatted
- 프레젠테이션 계층
- JWT
- ORM
- 토큰기반 인증
- 스프링부트
- 스프링 부트 테스트
- Today
- Total
목록Back-end (69)
[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..
ExecutorService 1. Thread Pool을 이용하여 비동기적으로 작업을 실행하고, 관리한다. 2. 별도의 Thread를 관리하지 않아도 되므로 코드가 간결하게 유지된다 3. Thread 풀을 이용하여 자원을 효율적으로 관리한다. public interface ExecutorService extends Executor { //Runnable 인터페이스를 구현한 작업을 Thread Pool에서 비동기적으로 실행 void execute(Runnable command); /* Callable 인터페이스를 구현한 작업을 Thread Pool에서 비동기적으로 실행, 해당 작업의 결과를 Future 객체로 반환 */ Future submit(Callable task); /* ExecutorService..
Future 1. 비동기적인 작업을 수행한다. 2. 해당 작업이 완료되면 결과를 반환하는 인터페이스다. public interface Future { boolean cancle(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isDone(); V get() throws InterruptedException, ExcutionException; V get(long timeout, TimeUnit unit) throws InterruptedException, ExcutionException, TimeoutException; } isDone() Future의 상태를 반환한다. Task가 완료되었다면, 원인과 상관없이 True를 반환한다. isCan..
Blocking Caller는 Callee가 완료될떄까지 대기한다. 제어권을 Callee가 가지고 있다. Caller와 다른 별도의 Thread가 필요하지 않다(혹은 Thread를 추가로 쓸수도 있다) A: Caller는 getResult가 결과를 돌려 주기 전까지 아무것도 할 수 없다.(동기 - Blocking) B: Caller는 getResult가 결과를 구하고 callback을 실행하기 전까지 아무것도 할 수 없다. (비동기 - Blocking) → Caller는 getReulst가 완료 될 때까지 대기한다. (Blocking) → Caller를 호출한 후, Callee가 완료되기 전까지 caller는 아무것도 할수 없으며, 제어권을 Callee가 가지고 있다. Non-Blocking Callee..
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..
사용자가 서버에 접근할 때 이 사용자가 인증된 사용자인지 확인하는 방법은 다양하다. 대표적인 사용자 인증 확인 방법에는 서버 기반 인증과 토큰 기반 인증이 있다. 서버기반 인증 스프링 시큐리티에서는 기본적으로 세션 기반 인증을 제공해 준다. 아래 글을 참고 바란다. https://dev-junick.tistory.com/57 스프링 부트 - 로그인/로그아웃 구현 스프링 시큐리티 설정 build.gradle (의존성 추가) dependencies { //스프링 시큐리티를 사용하기 위한 스타터 의존성 implementation 'org.springframework.boot:spring-boot-starter-security' //타임리프에서 스프링 시큐리 dev-junick.tistory.com 토큰기반 인..
스프링 시큐리티 설정 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파일에 의존성을 위와 같이 추가한다...
스프링 시큐리티(Spring Security) 스프링 시큐리티는 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크이다. 보안 관련 옵션을 제공하며, 어노테이션으로 설정하무로 매우 쉽게 사용할 수 있다. CSRF(Cross Site Request Forgery 사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격)이나, 세션 공격(Session Fixation 사용자의 인증 정보를 탈취하거나 변조하는 공격)을 방어해 주고 요청 헤더도 보안 처리를 해주므로 개발자가 보안 관련 개발을 해야하는 부담을 크게 줄여준다. 필터 기반으로 동작하는 스프링 시큐리티 스프링 시큐리티는 필터 기반으로 동작한다. 스프링 시큐리티는 위와 같이 다양한 필터들로 나누어져 있으며, 각 필터에서 인증,. 인가와..
인증(Authentication) 인증은 사용자의 신원을 입증하는 과정이다. 예를 들어 사용자가 사이트에 로그인을 할 떄 누구인지 확인하는 과정을 인증이라고 한다. 인가(Authorization) 인가는 인증과는 다르다. 인가는 사이트의 특정 부분에 접근할 수 있는지에 권한을 확인하느 작업니다. ㅇㅖ를 들어 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없다. 이런 권한을 확인하는 과정일 인가라고 한다.
기능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..