전체 글 34

[Do it] 알코테 자바 6일차

05-3 삽입 정렬 (Insertion Sort)삽입 정렬은 이미 정렬된 데이터 범위에 정렬되지 않은 데이터를 적절한 위치에 삽입하여 정렬하는 방식이다.앞에서부터 정렬된 영역을 하나씩 확장하면서, 새로운 데이터를 올바른 위치에 끼워 넣는 방식으로 동작한다.즉, 선택한 데이터를 현재 정렬된 데이터 범위 내에서 적절한 위치에 삽입하는 것이 핵심이다.1. 삽입 정렬의 동작 원리1. 배열의 두 번째 요소부터 시작한다.2. 현재 값을 정렬된 왼쪽 영역과 비교한다.3. 현재 값보다 큰 값들은 오른쪽으로 한 칸씩 이동한다.4. 이동이 끝난 위치에 현재 값을 삽입한다.5. 이 과정을 배열 끝까지 반복한다.2. 예시 (오름차순 정렬)초기 배열8 5 6 2 41. 5를 정렬된 영역 [8]에 삽입5 8 6 2 42. 6을 ..

[Do it] 알코테 자바 5일차

05. 정렬05-1 버블 정렬 (Bubble Sort)버블 정렬은 인접한 두 요소를 비교하여 순서가 잘못되어 있으면 서로 교환(swap)하는 방식의 정렬 알고리즘이다.가장 단순한 정렬 알고리즘 중 하나이며, 구현이 매우 쉽다.하지만 효율이 낮아 실전에서는 거의 사용되지 않는다.1. 동작 원리배열을 처음부터 끝까지 순회하면서인접한 두 값을 비교하고, 큰 값을 뒤로 보내는 방식으로 정렬한다.한 번의 순회가 끝나면가장 큰 값이 배열의 맨 뒤로 이동하게 된다.이 과정을 반복하면마치 거품이 위로 올라가듯이 큰 값이 뒤로 이동한다는 의미에서“버블 정렬”이라는 이름이 붙었다.2. 예시배열:5 3 8 4 21회전 후:3 5 4 2 82회전 후:3 4 2 5 83회전 후:3 2 4 5 84회전 후:2 3 4 5 83. ..

로그인 API가 하는 일과 요청 → 응답 흐름 정리

로그인 API의 목적은 단순하다.ID/PW를 검증해서 “이 사람이 맞다”를 확인한 뒤,Access Token과 Refresh Token을 발급해주는 것이다.즉, 로그인은 “인증(Authentication)” 과정이다.1. 로그인 요청 → 응답 전체 흐름1. 클라이언트 → 로그인 요청2. Controller → 요청 검증 후 Service 호출3. Service → 유저 조회 및 비밀번호 검증4. Repository → DB에서 유저 조회5. PasswordEncoder → 비밀번호 일치 여부 확인6. TokenProvider → JWT 토큰 생성7. Service → 응답 DTO 조립8. Controller → JSON 응답 반환각 단계가 어떤 책임을 가지는지 이해하는 것이 중요하다.2. 로그인 API ..

DTO vs Entity 정리

1. Entity핵심 개념DB 테이블과 매핑되는 객체JPA 기준 @Entity영속성 컨텍스트에 의해 관리됨영속성 컨텍스트란?엔티티를 저장하고 관리하는 JPA의 메모리 공간이다.같은 트랜잭션 안에서 엔티티를 조회하면 동일 객체를 보장하고,변경 감지(Dirty Checking)를 통해 자동으로 UPDATE 쿼리를 생성한다.역할데이터 저장상태 변경도메인 규칙 일부 포함 가능연관관계 관리Entity는 단순 데이터 구조가 아니라도메인 모델의 중심 객체다.예시@Entitypublic class User { @Id private Long id; private String email; private String password; private String role;}이 구조는 DB 테이블과 ..

[Do it] 알코테 자바 4일차

04-5 스택과 큐1. 스택 (Stack)스택은 삽입과 삭제가 한쪽 끝에서만 이루어지는 자료구조이다.구조적으로 후입선출(LIFO, Last In First Out) 방식을 따른다. 동작 방식push : 데이터 삽입pop : 데이터 제거peek : 가장 위 데이터 확인가장 나중에 들어온 데이터가 가장 먼저 나간다.특징한 방향(Top)에서만 연산 수행구현이 단순함재귀 구조와 동일한 원리활용 분야깊이 우선 탐색 (DFS)백트래킹재귀 함수 호출 구조괄호 검사 문제되돌리기(Undo) 기능재귀 함수와 스택 재귀 함수는 내부적으로 **호출 스택(Call Stack)**을 사용한다.함수 호출 시 스택에 쌓임함수 종료 시 스택에서 제거따라서 재귀는 스택 구조와 동일한 원리로 동작한다.시간 복잡도push : O(1)pop..

Controller / Service / Repository 역할 정리

1. Controller 역할Controller는 “입구” 역할을 담당한다. 하는 일HTTP 요청 받기URL, PathVariable, QueryString, RequestBody 파싱로그인 사용자 확인요청 값 기본 검증(필수값, 형식)Service 호출HTTP 응답 반환즉, 웹 계층과 직접 연결된 부분이다. 하면 안 되는 일비즈니스 정책 판단트랜잭션 처리DB 직접 접근Repository 직접 호출복잡한 도메인 로직 작성Controller에서 DB를 직접 호출하면웹 요청 처리와 비즈니스 로직, 데이터 접근이 한 계층에 섞이게 된다.이 경우책임이 분리되지 않는다.변경에 취약해진다.테스트가 어려워진다.API 외의 다른 인터페이스(배치, 이벤트 등)에서 재사용이 어렵다.2. Service 역할Service는 ..

[Do it] 알코테 자바 3일차

04. 자료구조04-1 배열과 리스트1. 배열 (Array)배열은 연속된 메모리 공간에 동일한 타입의 데이터를 저장하는 자료구조이다.특징인덱스를 통해 O(1) 시간에 바로 접근 가능메모리 공간이 연속적으로 배치됨크기를 선언 시 지정해야 함한 번 선언하면 크기 변경 불가중간에 삽입/삭제 시 요소 이동 필요 → 비효율적장점빠른 접근 속도구조가 단순함단점크기 변경 불가삽입/삭제 비용 큼 (O(N))2. 리스트 (Linked List)리스트는 값과 다음 노드의 주소(포인터)를 함께 저장하는 노드(Node)들을 연결한 자료구조이다.특징노드 단위로 구성메모리 공간이 연속적이지 않음인덱스 개념이 없음Head부터 순차 접근 필요 → 접근 속도 O(N)크기를 미리 지정할 필요 없음장점삽입/삭제가 빠름 (O(1), 위치만..

[Do it] 알코테 자바 2일차

03. 미리 보는 코딩 테스트 오답 노트03-1. 예상치 못한 음수 결과 해결하기문제 원인int 범위를 초과하면 오버플로우(overflow) 가 발생한다.int a = 2_000_000_000;int b = 2_000_000_000;System.out.println(a + b); // 음수 출력됨 (오버플로우)int의 범위 -2,147,483,648 ~ 2,147,483,647-> 이 범위를 넘으면 값이 순환하며 음수가 된다. 해결 방법큰 수가 나올 가능성이 있다면 처음부터 long 사용long a = 2_000_000_000L;long b = 2_000_000_000L;System.out.println(a + b); // 정상 출력 실전 팁곱셈이 들어간다?N ≤ 1,000,000,000 같은 조건이 ..

ERD → API → Service 흐름 정리

Controller → Service → Repository → DB 흐름과 구독 도메인 예시 정리1. 백엔드 계층 흐름 한 장 요약Client ↓ HTTPController (API) - Request DTO 파싱 - 인증 사용자 확인 - 입력 검증(필수값/형식) ↓Service (Usecase) - 비즈니스 정책 실행 (가능/불가 판단) - 상태 변경 / 이벤트 발생 - 트랜잭션 처리 ↓Repository - 조회/저장 (영속성 처리) ↓DB (ERD)핵심은 역할 분리다.Controller는 HTTP 요청/응답과 입력 검증을 담당한다.Service는 비즈니스 정책과 상태 전이를 담당한다.Repository는 DB 접근을 담당한다.2. 구독 도메인 ERD 관점에서 API 떠올리기구독..

[Do it] 알코테 자바 1일차

01. 어떤 알고리즘으로 풀어야 할까?01-1. 시간 복잡도 표기법 알아보기알고리즘을 선택할 때 가장 먼저 고려해야 하는 것은 시간 복잡도(Time Complexity)이다.입력 크기 N이 커졌을 때, 코드가 얼마나 빠르게 실행되는지를 수학적으로 표현한 것이다.n)표기법의미설명빅오메가 (Ω)최선의 경우최소 수행 시간빅세타 (Θ)평균(정확한 경계)상한과 하한이 같은 경우빅오 (O)최악의 경우최대 수행 시간-> 코딩 테스트에서는 보통 최악의 경우인 빅오(Big-O) 를 기준으로 계산한다.1. O(1) — 상수 시간int a = 10;입력 크기와 상관없이 1번 실행된다.2. O(N) — 선형 시간for(int i = 0; i N번 실행된다.3. O(N²) — 이중 반복문for(int i = 0; i N × N..