전체 글 67

[부트캠프] TIL - 10/08

쿼리스트링 변수 바인딩 -> @RequestParam가변 경로의 변수 바인딩 -> @PathVariableHttp 요청에 의한 Body 변수 바인딩 -> @RequestBody 이런 것들은 전부 binding 어노테이션. 마찬가지로 Argument Resolver 역시도 이것과 마찬가지이다. 컨트롤러의 메소드에서 조건에 맞는 파라미터가 존재한다면(조건을 만족하는지는 public class AuthUserArgumentResolver implements HandlerMethodArgumentResolver 이런 클래스를 정의하여 boolean 변수에 담아 판별하는 작업을 진행) 만약, 요청에 유저ID가 필요하다고 한다면 HTTP Authorization Bearer 헤더에 담긴 JWT의 payload 에서..

부트캠프/TIL 2024.10.08

[부트캠프] TIL - application.properties 와 application.yml

properties의 경우는 내부 구조가 key = value 의 형태로 되어있다.yml의 경우는 내부 구조가 들여쓰기로 구분되는 계층 구조 및 key : value 형태로 되어있다.   properties 에서는 .을 기준으로 분리했던것을 yml에서는 .을 기준으로 : 와 들여쓰기로 나누어서 표현나머지는 완전히 동일하다고 볼 수 있을것 같다, 자유롭게 properties 파일을 yml로 바꿀 수 있을 수도 있을것. 결국에는 어떤것을 사용해도 문제는 없고, 다만 properties와 yml을 동시에 사용하면 properties의 우선순위가 높기때문에yml의 설정내용을 덮어쓰기때문에 둘 중 하나를 선택해서 사용하면 되겠다.

부트캠프/TIL 2024.09.19

[부트캠프] TIL - 정적 팩토리 생성자

정적 팩토리 메소드 (생성자)는 객체를 생성할 때 사용하는 메소드. 보통 객체를 생성할때는 생성자를 사용하여 new 키워드를 사용하여 직접 생성을 하지만.  정적 팩토리 메소드는 클래스 안에 정적(static) 메소드를 선언하여 객체를 생성하고 반환(return)하는 방식입니다. 팀원의 코드에서 발견한 .of() 메소드 또는 .getInstance()가 주로 이런 방식에 해당되고  장점으로는객체 생성의 유연성을 높이고, 클래스 설계의가독성이 좋아진다고합니다,  간단한 예시public class User { private String name; private int age; private User(String name, int age) { this.name = name; ..

부트캠프/TIL 2024.09.13

[부트캠프] TIL - @Nested, JUnit5

@Nested 어노테이션은 JUnit 5 에서 테스트 클래스를 내부 클래스로 구성할 때 사용합니다. 이걸로관련 테스트 케이스들을 논리적으로 그룹화하여 더 명확하고 구조적인 테스트를 작성할 수 있습니다. 말이 어렵지만 풀어쓰면 큰 테스트 클래스 안에 작은 테스트 그룹(내부 클래스)를 만들어서 서로 관련된 테스트 들을 묶어서 실행시켜주는 것을 의미합니다.큰 시험을 여러 개의 작은 시험으로 나누는 것과 비슷합니다. 예를 들어, 수학 시험에서 덧셈 문제들과 뺄셈 문제들을 따로 그룹으로 묶는 것처럼, 테스트도 관련된 부분끼리 묶어서 관리할 수 있습니다.**@Nested**는 테스트 코드 안에서 비슷한 종류의 테스트를 한곳에 모아서 보기 좋게 정리해주는 역할을 합니다.예시public class CalculatorT..

부트캠프/TIL 2024.09.11

[부트캠프] TIL - Entitiy간 연관관계

엔티티간의 조회에서 방향이란A와 B 엔티티가 있을때 양방향은 A에서 B를 참조할 수 있고, 반대로 B에서도 A를 참조할 수도 있다는것. N : 1 - Food가 참조할 상대방 User가 멤버변수로 존재함. 따라서 참조가 가능@Entity@Table(name = "food")public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private double price; @ManyToOne @JoinColumn(name = "user_id") private User user;} 반대로 1 : M에서 - 하나의 User가 여러 개의 Food와 ..

부트캠프/TIL 2024.09.10

[부트캠프] TIL - 인증, 인가, JWT

인증과 인가 인증 : 해당 유저가 실제 그 유저가 맞는지 확인하는 과인가 : 유저가 특정 리소스에 접근하는것에 대한 허가를 확인하는 과정 동작과정  1. 사용자가 로그인 요청을 보냅니다.2. 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조해봐야겠죠?3. 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 유저의 정보를 JWT로 암호화 해서 내보냅니다.4. 서버는 로그인 요청의 응답으로 jwt 토큰을 내어줍니다.5. 클라이언트는 그 토큰을 저장소에 보관하고 앞으로의 요청마다 토큰을 같이 보냅니다.6. 클라이언트의 요청에서 토큰을 발견했다면 서버는 토큰을 검증합니다.7. 이후에는 로그인 된 유저에 따른 응답을 내어줍니다. JWT란Json Web Token Json 포맷을 사용하여 사용자..

부트캠프/TIL 2024.09.09

[부트캠프] TIL - JPA 돌아보기

JPA를 사용하여 DB에 저장 수정 삭제시에는 트랜잭션 적용이 필수이나, 조회 작업은 단순히 데이터를 읽기만 하기 때문에트랜잭션 적용이 필수가 아닙니다, 하지만 조회 작업에도 트랜잭션이 필요한 경우가 있을 수 있으므로 @Transactional(readOnly = true) 옵션을 설정하여 적용하면 됩니다. Spring Data JPA는 JPA를 쉽게 사용할 수 있도록 만들어놓은 하나의 모듈 JPA를 추상화시킨 Repository 인터페이스를 제공합니다.Repository 인터페이스는 Hibernate같은 JPA 구현체를 사용하여 구현한 클래스통해 사용. Spring 서버가 실행될 때 JpaRepository를 상속한 클래스를 스캔하면 해당 인터페이스를 토대로 자동으로 SimpleJpaRepository..

부트캠프/TIL 2024.09.09

[뉴스피드] 프로젝트 KPT 회고

Spring 6기 20조 KPT 회고 Keep팀 분위기가 너무 좋았다, 매 회의마다 웃었던거 같습니다, 각자의 개성이 진하고 파장이 맞지않는 팀원이 없었기 때문에 좋은 분위기로 끝까지 나아갈 수 있었습니다.회의 시간에 모든 사람들이 제때 참여했다의사소통이 활발했다.  Problem사전 지식이 부족해서 N+1 등 관련 문제에 마주쳤을 때 문제 상황을 식별하지 못했다.더미데이터를 과하게 입력하여 테스트 중 오류가 자주 발생했다.코드리뷰가 시간이 지날수록 게을러져 느슨해졌다.문제상황 발생까지 사전에 인지하지 못햇다. Try복잡한 쿼리메소드를 풀어보기TDD 기반 구현하기, 테스트 코드 작성해보기기본 학습외에 추가 학습을 하여 문제상황을 조기에 발견하기 짧은시간에 방대한 양의 학습을 진행하고 결과를 도출해야 하는..