내가 Spring 트랙에 참여한 계기는 무엇인가요?이전에 한 프로젝트 경험을 토대로 기술적으로 더 확장된 프로젝트를 진행하고 싶습니다. 구체적으로는 대용량 트래픽 경험, 지속적인 코드 개선, 경험해보지 않은 기술 사용을 통해 기술적 역량을 키우고자 합니다.내가 이해한
0. 오늘의 학습 키워드 git 사용 특강 첫번째 팀 프로젝트 - 팀 소개 웹페이지 제작 1. Git / Github 사용법 Git 이란? > 코드 변경점을 기록할 수 있도록 도와주는 버전 관리 도구(형상 관리 도구) Git을 통해 소프트웨어의 변경사항을 체계적으
Git 에는 Branch 를 통해 프로젝트의 버전 더욱 편리하게 관리하고 충돌을 예방할 수 있다. Main (Master) : 최상위 브랜치. 최종적으로 배포되는 버전이 관리된다. (이전에는 Master 명칭을 쓰기도 했으나

주제: 팀원 소개 웹페이지 제작HTML / CSSJavaScriptFirebaseGit <메인 페이지> <메인 페이지 - 상세 정보 (모달)> <방명록 페이지> 메인 페이지 - 1명메인 페이지 - 상세 화면 모달 - 1명방명록 페이지 - 1명메인 페
Java 개념 정리 (기초 문법, 객체지향)Git 2차 특강TIL 회고 특강 ① 플랫폼 독립성 : Java 언어 --> 바이트코드로 컴파일 후, JVM(자바 가상 머신)이 설치된 환경이라면 어디서든 실행 가능 ② 객체 지향 : 객체 지향적 언어 (모듈, 클래스, 메소드
Java 예외 처리 1. 예외 (Exception) : 프로그램 실행 중 발생할 수 있는 의도하지 않은 상황. 프로그램의 비정상적인 동작 혹은 에러가 발생할 수 있으므로 적절히 처리하거나 회피하는 것이 필요하다. 의도하지 않은 예외 : 프로그램이 의도한 대로 동작하지 않는 경우. 의도적인 예외(throw) : 특정 조건에서 의도적으로 예외를 발생시킴. ...

프로젝트 소개 기능 소개 트러블슈팅을 작성한 TIL Github 관련 read.me 에러 예외 처리 throw 에러 처리 제너릭 extends Number 'ArithmeticCalculator'은(는) abstract로 선언되거나 'Number'에서 추상 메서드
제네릭은 클래스, 메소드 등에서 타입을 매개변수화 하는 기능이다.데이터 타입은 외부에 의해 정해지며, 제너릭 메소드를 인스턴스화 하거나 제너릭 메소드를 호출할 때 타입을 정해줄 수 있다.코드 유연성 : 사용 시점에서 여러 타입을 지정하여 사용할 수 있으므로 코드가 간결
1. Enum 란? > ✔️ 미리 정의되어 있고, 서로 관련이 있는 상수들의 집합 enum를 사용하여 Color로 특정 상수를 묶어둘 수 있으며, 또한 특정 상태를 나타낼 때 유용하다. final static 으로도 상수를 정의할 수 있지만 enum을 사용 시 문자
📢 1. 프로젝트 소개 > ✔️ 패스트푸드 가게를 방문하는 고객을 위한 주문 키오스크 프로그램 github : https://github.com/YejinY00n/CalculatorProject 주요 기능 🍔 메뉴 출력 목적: 사용자가 카테고리 별로 메뉴를 선택할 수 있다. 카테고리별 메뉴 분류: 햄버거, 음료, 사이드 메뉴 등으로 카테고리별로 메...

스파르타 코딩클럽 기초 Spring 강의를 수강하며 배운 내용들을 복습할 겸 기초 네트워크 개념을 정리해보았다.: TCP/IP를 기반으로 통신하는 컴퓨터 네트워크 통신망: 컴퓨터 네트워크에서 데이터를 주고 받기 위한 통신 프로토콜(통신 규약). 현대 인터넷의 기반 프로

통신에 사용하는 데이터 양식 XML : 과거에 사용. 통신에 필요한 데이터 양이 많다는 단점 JSON : 통신 데이터 적음. 현재 사용. 서버나 클라이언트 간 언어가 달라도 통신이 가능. 서버 성능 향상을 위한 방법 Scale Up : 수직적 확장. 단일 서버의 하

HTTP (Hyper Text Transfer Protocol) 주요 특징 비연결(Connection-less) 캐시, 브라우저 캐싱로 해결 현재는 HTTP 지속연결(Persistent Connections) 으로 해결 무상태(State-less)

RuntimeException, CheckedException, UncheckedException 의 차이점

📅 **일정** - **일정 생성**: 작성자와 비밀번호를 함께 입력하여 새로운 할 일을 저장 - **일정 조회**: 개별 일정 조회 및 기간/작성자 기준으로 모든 일정 목록을 조회 - **일정 업데이트**: 올바른 비밀번호 입력 시 할 일과 작성자 정보를 수정 -

## 트러블 슈팅 ### DB 구성 #### 📌 문제 **⛔ 문제** 스프링부트 앱 실행 시, 아래와 같은 에러 메세지 발생하며 실행이 되지 않음. ```bash org.springframework.beans.factory.BeanCreationException:
: REST(Representational State Transfer) 아키텍처 스타일의 설계 원칙을 준수하는 API이다.그렇다면 REST란?인터넷과 같은 복잡한 네트워크에서의 통신을 관리하기 위한 소프트웨어 아키텍처이다.구체적으로는 자원(Resource을 이름(Nam

일정관리 프로젝트 Develop
📌 JPA Auditing 동작 오류 **⛔ 문제** - 타임스탬프를 출력하기 위해, `@Builder`를 적용한 엔티티에서 `@EntityListeners(AuditingEntityListener.class)` 적용 후 `@CreatedDate`로 생성일을 자동 입
트러블 슈팅 Category 테이블 관리 전략 문제 ERD 설계 단계에서 Enum Category 를 엔티티화 하여 따로 Category 테이블로 분리하여 관리하기로 결정. (룩업 테이블) 룩업 테이블 이란? 미리 정의된 값들을 테이블로 분리하여 관리하는 방식

📝 소개 > **📰 SNS 기반 뉴스피드 프로젝트** > *페이스북, 인스타그램*과 같은 형태의 SNS 플랫폼 <br> ### ✅ 주요 기능 - **사용자, 게시글, 댓글의 CRUD** 기능을 지원합니다. - 게시글과 댓글에 **좋아요(❤️)** 를 남길 수
회고 Lv2. N+1 문제 해결 기존 코드 LEFT JOIN FETCH 를 통해 N+1 문제 해결 수정 @EntityGraph를 사용하여 N+1 해결 FETCH JOIN vs @EntityGraph FetchType.EAGER 로 조회 시 조회된 데이터(N)만
Intercepter 1. Interceptor와 AOP를 활용한 API 로깅 키워드 : Interceptor 또는 AOP를 활용합니다. 어드민 사용자만 접근할 수 있는 특정 API에는 접근할 때마다 접근 로그를 기록해야 합니다. 요구사항: 어드민 사용자만 접근할

Collections 에서 envirments 환경변수 설정 (Global 아님)TOKEN_HEADER 환경변수 추가우측 상단에서 TOKEN_HEADER 환경변수 포함하는 환경변수 셋 선택 (스크린샷에서는 Test)Scripts --> Post-response에 위의

> **🛵 배달 어플 기반 API 백엔드 서버 구현 프로젝트** <br> > *배달의 민족* 어플리케이션 참고 <br> ### ✅ 주요 기능 **📌 회원 관리** - 사용자 역할 기반(일반/사장) 전용 기능 - JWT 기반 인증/인가 **🏪 가게** - 메뉴

이번에 5분 기록 보드라는 걸 알게 되었다.공부 중이나 프로젝트 중에 생긴 트러블 슈팅, 생각 메모, 배운 내용 등등을 5분 안에 가볍게 정리하는 것이다.TIL 한번 쓸때마다 최소 30분~1시간 이라 자주 안 쓰는 편인데, 5분 기록보드를 쓰니 그때그때 생각나는 것들을
### 패키지명 오류 (대소문자) `image`로 적어야할 것을 `Image`로 대소문자 오타가 남. **1차 시도** 인텔리제이에서 패키지명 변경이 안되어 파일 탐색기에서 변경하여 import 문 경로 등이 수정되었으나, 여전히 **`git` 에는 변경 사항**이
maxFileSize : 파일 하나의 최대 가능 사이즈maxRequestSize : 한번에 전송 가능한 최대 파일 사이즈enabled : 파일 업로드 활성화(true)file.upload-dir : 서버 내 파일 저장 경로프로젝트 루트 디렉토리 기준으로 생성예시) pr

프로젝트에서 JWT 기반 인증 인가 구현을 담당하게 되었다. 시간이 충분하지 않아 **스프링 시큐리티와 Refresh 토큰 없이**, **Access 토큰**만 가지고 구현하였다. 웹상의 대부분의 자료가 스프링 시큐리티 + Refresh 토큰을 기반으로 하고 있어,
Transaction

ORM(Object-Relational Mapping)을 구현하는 방법에는 JPA, QueryDSL 등 여러가지 방법이 있다. JPA를 사용하다보면 다중 조건 검색과 같이 조건이 복잡한 쿼리는 `@Query`이나 JPQL을 사용하여 구현하게 된다. 하지만, **JP
원래 쓰던 방식 JWT Access 토큰만 사용 여기서 Spring Security를 추가하고 Access + Refresh 토큰 쓰는 걸로 리팩토링 Spring Security 구성 요소 Authentication 인증 객체 JwtFilter 흐름 Http

Multipart를 이용하여 서버로 이미지를 받고 S3으로 업로드하는 과정을 정리해보았다. AWS S3 설정 사용자 그룹 생성 보안이나 ACL(접근 제어 리스트) 관리 편리를 위해서 사용자를 우선 생성해주어야 한다. 이미 IAM 사용자가 있다면 이 단계는 패스하면 된

100만건을 일일히 생성하면 당연히 INSERT 쿼리도 100건이 날아가기 때문에 시간이 오래 걸린다. JPA 의 saveAll() 을 사용한다고 해도, 내부에서는 while 로 동작하기 때문에 결국 하나의 쿼리가 아니라 저장하려는 수 만큼 쿼리가 발생하게 된다.

매니저 서비스에 Transcation Propagation REQUIRES_NEW 이거 적용하고logrepository.save는 try-catch로 감쌌는데 실행이 안된다찾아보니 propagation 은 외부 호출때 적용이 된다즉 logrepository.save 에
특정 메소드에만 AOP를 적용할 수 있도록 커스텀 어노테이션을 정의한다.메소드 호출 전과 후에 System.currentTimeMillis()을 사용해 시간 차를 측정하고, 메소드 호출에 걸린 시간을 log 로 출력한다.@Around의 포인트컷에 커스텀 어노테이션 @E

Redis Lettuce Redis의 Lettuce는 Java에서 Redis에 비동기로 접근할 수 있게 해주는 Redis 클라이언트 라이브러리 이다. 동기, 비동기 모두 지원 non-blocking 으로 처리 가능하며 확장성이 뛰어남 스프링부트 2.x 이상: 기본 Re
쿠폰 발급 동시성 이슈 해결: MySQL 네임드 락 적용기 (with JDBC vs DataSource)
Redisson이란? * Redis의 고급 클라이언트 라이브러리로, Java에서 분산 락, 세마포어, 블루밍 필터 등 다양한 구조를 제공 * 내부적으로 Lua 스크립트를 사용하여 안전한 락 획득/해제를 구현함 * Lettuce와 달리 분산 락 기능이 내장되어 있어 직

MySQL 네임드 락을 사용한 분산락 구현

FourChak은 4조가 만든 좌석에 착하고 앉는 예약 프로그램으로 FourChak입니다. FourChak은 사용자가 원하는 식당을 검색하고 실시간으로 예약 할 수 있도록 도와주는 식당 예약 플랫폼입니다. 실시간 예약 시스템을 통해 빠르고 편리한 외식 예약을 할 수 있

🚨 발급 제한 수량이 1000개인 쿠폰 테스트에서 1200건이 모두 발급되는 문제 발생동시에 여러 스레드가 쿠폰 수량을 조회 → 동일 수량(예: 568개)을 기준으로 중복 발급여러 스레드가 동일한 수량을 읽음 → 락이 제대로 작동하지 않음Spring AOP는 기본적으

세션 방식으로 로그인 시 세션 ID를 발급 받게 된다. 로그인 후 인증이 필요한 API 요청 테스트 시, 이 값을 매번 넣어주면 번거로우니 스크립트를 사용하여 자동으로 세팅되게 했다.
스케줄러 사용해서 구현
ㅁㅁ
메세지 큐 사용 해서 비동기 처리
프로젝트에서 채팅 기능이 필요해서 STOMP 웹소켓으로 구현했다.
[TIL] Security Filter 예외 처리

JUnit 테스트 환경 변수 자동으로 넣어주기

JMeter 로 API 테스트하기

1차 모의면접 후기
프로젝트 DB를 MySQL ➡️ PostGreSQL 로 바꿨는데, 그 과정에서 배치 테이블을 찾을 수 없다는 오류가 발생하였다. 시도한 여러가지 방법을 정리해봤다.1\. 인텔리제이 캐시 클린2\. DB 날리고 아예 새로 넣어주기3\. 스키마 public에 생성되었는지
Mock으로 테스트 중 이런 오류가 발생하였다. **UnnecessaryStubbingException**은 Mockito에서 설정했지만 실제 테스트 흐름에서 stubbing이 쓰이지 않을 때 발생하는 오류라고 한다.
프로젝트 작업 중 시간 범위 검증 어노테이션이 필요할 것 같아 따로 만들었다.단위는 ChronoUnit 에서 지원하는 단위라면 모두 사용 가능하다. (초분시, 일, 월 etc.)현재를 기준으로 min ~ max 를 검사현재 이전으로 하고 싶다면 min or max 값에