본문 바로가기

전체 글243

[내배캠] Spring Project 22조 뉴스피드 프로젝트 KPT 회고 KPT 회고KEEP, 다음 프로젝트로 가져갈소통을 자주 하면서 수월하게 프로젝트를 진행했습니다.팀원 모두가 한 명도 포기하지 않고 자신이 맡은 역할을 다 해냈습니다.프로젝트 시작 초반에 ERD 및 와이어프레임을 정하고 개발을 시작해서 관계설정및 이해하기 편리했습니다.추가 구현 개발시 의견을 서로주고 피드백을 하며 스코프 내에 구현해가는 과정이 좋았습니다.여러 기술을 적용해보는 것이 좋았습니다.의견이 많이 나오는 것이 좋았습니다.   PROBLEM, 버려야 할property yml 파일이 깃헙에 merge할떄 환경변수명 & 디렉토리 등이 일치하지 않아 충돌이 발생했습니다.프로젝트에만 집중 하다보니 알고리즘이나 TIL 에 조금 소홀해졌습니다.개인 강의를 완강하지 못했습니다.파일 디렉토리를 정리하지 못해 약간.. 2024. 9. 9.
[CS] 데이터베이스 정규화 https://docs.google.com/presentation/d/1aCRExnskkwHFPtLcKnB1Oa3nL6WFX4R_rirsKnxTZYs/edit#slide=id.g28593cb2e61_0_458  데이터베이스 정규화데이터베이스 정규화docs.google.com https://www.youtube.com/watch?v=_k4yghD5Ctk&t=507s 2024. 9. 5.
[Spring] 인터페이스의 default 메서드 인터페이스의 default 메서드// 해당 댓글이 있는지 확인Optional findByTodo_IdAndId(Long todoId, Long commentId);default Comment findByIdAndTodoIdOrElseThrow(Long todoId, Long commentId) { return findByTodo_IdAndId(todoId, commentId) .orElseThrow(() -> new NoSuchElementException("댓글을 찾을 수 없습니다."));} default 메서드의 특징:기본 구현 제공:인터페이스에서 default 메서드를 정의하면 해당 메서드의 기본 구현을 제공한다. 이를 통해 인터페이스를 구현하는 클래스들이 이 메서드를 재정의하지 않아도 .. 2024. 9. 1.
[Spring] RequestEntity RequestEntity// 일정 등록@PostMapping("/todo")public RegistTodoResDto createTodo(@RequestBody RegistTodoReqDto requestDto) { return todoService.createTodo(requestDto);}기존 방식의 createTodo 메서드는 'RegistCommentResDto' 객체를 직접 반환하므로 클라이언트는 HTTP 응답 본문에서 이 객체만 받게 된다.이 방법은 단순하지만 HTTP 상태 코드나 헤더를 세밀하게 제어할 수 없다.Spring은 자동으로 200 OK 상태 코드를 설정한다. // 일정 등록@PostMapping("/todo")public ResponseEntity createTodo(@Req.. 2024. 8. 30.
[Spring] [Memo] 메서드, 변수 명 선택, 중복된 @Transactional 처리, Pagenation 시 추가 데이터 압축 등 추가 Tips 메서드 명 선택// 일정 전체 조회 ( 페이지네이션 )@GetMapping("/todos")public List getTodos(@RequestParam(value = "page") int page, @RequestParam(value = "size", defaultValue = "10") int size) { // 응답 보내기 return todoService.getTodos(page-1, size);}메서드명 선언 시에 getTodos 보다 getTodoList 가 더 좋다 나중에 보면 무작정 다 가져오는 건 거의 없고 보통 특정 조건이 하나 붙는 경우가 있다.객체를 만들 때 목적에 맞게 메서드 새로 생성Comment .. 2024. 8. 30.
[Spring] 필터, 로깅 필터 필터란?Spring Boot에서 필터(Filter)는 HTTP 요청 및 응답을 가로채서 특정 작업을 수행하기 위해 사용됨.필터는 주로 보안, 로깅, 인증, 권한 부여, 데이터 압축, 데이터 변환, 캐싱 등의 목적으로 사용되며, 요청이 컨트롤러에 도달하기 전에 또는 응답이 클라이언트에 전달되기 전에 특정 로직을 실행할 수 있게 함. 필터가 필요한 이유 공통 작업 처리: 애플리케이션 전반에 걸쳐 공통적으로 수행되어야 하는 작업을 중앙에서 처리할 수 있음. 예를 들어, 모든 요청에 대해 CORS 처리, 로깅, 요청 및 응답의 인코딩 설정 등을 필터에서 처리할 수 있음.보안: 인증 및 권한 부여와 같은 보안 관련 작업을 처리할 수 있음. 요청이 실제 컨트롤러에 도달하기 전에 인증된 사용자만 접근할 수 있도.. 2024. 8. 25.
[Spring] JWT 다루기 토큰 생성에 필요한 데이터Base64로 Encode된 Secret Key를 properties에 작성해두고 @Value를 통해 가져옵니다.JWT를 생성할 때 가져온 Secret Key로 암호화합니다.이때 Encode된 Secret Key를 Decode 해서 사용합니다.Key는 Decode된 Secret Key를 담는 객체입니다.@PostConstruct는 딱 한 번만 받아오면 되는 값을 사용 할 때마다 요청을 새로 호출하는 실수를 방지하기 위해 사용됩니다.JwtUtil 클래스의 생성자 호출 이후에 실행되어 Key 필드에 값을 주입 해줍니다.암호화 알고리즘은 HS256 알고리즘을 사용합니다.Bearer 란 JWT 혹은 OAuth에 대한 토큰을 사용한다는 표시입니다.로깅이란 애플리케이션이 동작하는 동안 프로.. 2024. 8. 24.
[Spring] JWT 란? JWT(Json Web Token)란 JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token 이다.즉, 토큰의 한 종류.일반적으로 쿠키 저장소를 사용하여 JWT를 저장.JWT 사용 이유Session1 이 모든 Client의 로그인 정보를 소유하고 있음 Session 마다 다른 Client 로그인 정보를 가지고 있을 수 있음.Session1: Client1, Client2, Client3Session2: Client4Session3: Client5, Client6만약 Client 1의 로그인 정보를 가지고 있지 않은 Sever2 나 Server3 에 API 요청을 하게되면 문제가 발생할 수 있음해결방법Sticky Session: Client 마다 요청 Server 고정함.. 2024. 8. 24.
[Spring] 인증과 인가, 쿠키와 세션 인증과 인가인증(Authentication)인증은 해당 유저가 실제 유저인지 인증하는 개념스마트폰에 지문인식, 이용하는 사이트에 로그인 등과 같이, 실제 그 유저가 맞는지를 확인하는 절차인가(Authorization)인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념예를들어 관리자 페이지-관리자 권한인증의 방식쿠키-세션 방식은 서버가 ‘특정 유저가 로그인 되었다’는 상태를 저장하는 방식.인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 되고 유저의 이전 상태의 전부는 아니더라도 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념. 사용자가 로그인 요청을 보냅니다.서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조해봐야겠죠?실제 유저테이블의 정보와 일치한다면 인.. 2024. 8. 24.
[Spring] Bean 수동 등록, 같은 타입의 Bean 이 2개일 때 해결 01. Bean을 수동으로 등록하는 방법 Bean 수동 등록이란? @Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록일반적으로 @Component를 사용하여 Bean을 자동으로 등록하는 것이 좋음프로젝트의 규모가 커질 수록 등록할 Bean들이 많아지기 때문에 자동등록을 사용하면 편리함비즈니스 로직과 관련된 클래스들은 그 수가 많기 때문에 @Controller, @Service와 같은 애너테이션들을 사용해서 Bean으로 등록하고 관리하면 개발 생산성에 유리함Bean 수동 등록은 언제 사용될까?기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록하는 것이 좋음.공통 로그처리와 같은 비즈니스 로직을 지원하기 위한 부가 적이고.. 2024. 8. 22.
[Spring] JPA Auditing, Timestamped, Query Methods JPA AuditingTimestamped데이터의 생성(created_at), 수정(modified_at) 시간은 포스팅, 게시글, 댓글 등 다양한 데이터에 매우 자주 활용되는데, 각각의 Entity의 생성 수정 시간을 매번 작성하는건 너무 비효율적임 @Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class Timestamped { @CreatedDate @Column(updatable = false) @Temporal(TemporalType.TIMESTAMP) private LocalDateTime createdAt; @LastModifiedDate @Column .. 2024. 8. 21.
[Spring] Entity 의 상태 * 비영속쉽게 말하자면 new 연산자를 통해 인스턴스화 된 Entity 객체를 의미아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않음비영속 상태는 JPA가 관리하지 못하기 때문에 해당 객체의 데이터를 변경해도 변경 감지가 이루어지지 않음* 영속 persist(entity) : 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만듦비영속 상태는 JPA가 관리하지 못하기 때문에 해당 객체의 데이터를 변경해도 변경 감지가 이루어지지 않음* 준영속준영속 상태는 영속성 컨텍스트에 저장되어 관리되다가 분리된 상태를 의미 영속 상태에서 준영속 상태로 바꾸는 방법 detach(entity) : 특정 Entity만 준영속 상태로 전환합니다.영속성 .. 2024. 8. 21.
[Spring] 영속성 컨텍스트의 기능 영속성 컨텍스트는 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간 1차 캐시영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있음.우리가 저장하는 Entity 객체들이 1차 캐시 즉, 캐시 저장소에 저장된다고 생각하시면 됨캐시 저장소는 Map 자료구조 형태.key에는 @Id로 매핑한 기본 키 즉, 식별자 값 저장value에는 해당 Entity 클래스의 객체 저장영속성 컨텍스트는 캐시 저장소 Key에 저장한 식별자값을 사용하여 Entity 객체를 구분하고 관리Entity 저장em.persist(memo); 메서드가 호출되면 memo Entity 객체를 캐시 저장소에 저장Entity 조회em.find(Memo.class, 1); 호출 시 캐시 저장소를 확인 한 후 해당 값이 없다면?DB에 S.. 2024. 8. 21.
[Spring] 영속성 컨텍스트, 트랜잭션 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요EntityManager는 이름 그대로 Entity를 관리하는 관리자개발자들은 EntityManager를 사용해서 Entity를 저장하고 조회하고 수정하고 삭제할 수 있음EntityManager는 EntityManagerFactory를 통해 생성하여 사용할 수 있음 EntityManagerFactoryEntityManagerFactory는 일반적으로 DB 하나에 하나만 생성되어 애플리케이션이 동작하는 동안 사용됨EntityManagerFactory를 만들기 위해서는 DB에 대한 정보를 전달해야함정보를 전달하기 위해서는 /resources/META.. 2024. 8. 20.
[Spring] Spring, Spring MVC, Spring 3 Layer Spring은 자바 어플리케이션 개발을 도와주는 프레임워크  스프링 MVC는 동기식 요청-응답 웹 애플리케이션을 위한 프레임워크이며, 전통적인 웹 애플리케이션 개발에 사용스프링 Batch는 대규모 데이터 처리 작업을 위한 배치 프레임워크로, 실시간이 아닌 일괄 작업에 적합스프링 WebFlux는 비동기식 논블로킹 웹 애플리케이션을 위한 프레임워크로, 고성능, 고효율의 리액티브 애플리케이션을 개발하는 데 사용1. 스프링 MVC (Model-View-Controller)더보기목적: 전통적인 동기식 웹 애플리케이션 개발을 위한 프레임워크.아키텍처: 동기식 요청-응답 기반으로 동작. 클라이언트가 요청을 보내면 서버는 요청을 처리하고, 처리 결과를 클라이언트에 응답으로 보냅니다.주요 특징:전통적인 웹 개발에 많이 .. 2024. 8. 19.