오늘은 스파르타 내일배움캠프 백엔드 과정의 첫 수업이었다.전공자이긴 하지만, 오늘은 의식적으로"처음 배우는 사람"이라는 마음으로 강의를 들었다.학교에서 웹, 서버, DB를 배운 적은 있었지만막상 누군가에게 명확하게 설명하기는 쉽지 않았다.그래서 오늘은 아는 개념도 그냥
오늘은 스파르타 내일배움캠프 백엔드 과정에서어제 들었던 강의 내용을 바탕으로API 설계부터 Mock 서버, 프론트엔드 연동까지의 흐름을 직접 실습해본 날이었다.어제는 개념을 훑는 느낌이었다면,오늘은 그 개념들을 하나씩 연결해보는 날 이었다.특히“웹 프로젝트가 실제로 어
오늘은 Java 문법 전반과 객체지향 개념을 중심으로 공부했다.단순히 강의를 듣는 데서 끝내기보다는,IDE에서 직접 코드를 따라 치고 구조를 바꿔보면서Java와 객체지향을 다시 정리하는 데 시간을 썼다.전공 수업에서 이미 배운 내용도 많았지만,한 번에 쭉 이어서 보니개

오늘은 맛집 관리 API를 설계하고, Mock 서버와 프론트엔드를 연동해보는 과제를 진행했다.이번 과제의 핵심은 단순히 API를 정의하는 것이 아니라,실제 서비스에서 사용 중인 API를 직접 분석하고 그 구조를 바탕으로 API를 설계 -> Mock 서버로 검증 -> 프
오늘은 자바 객체지향 개념을 다시 복습하고,이어서 예외와 예외 처리, Optional과 null 다루는 방법, 컬렉션과 제네릭에 대해 공부했다.오전에는 지난 주에 진행했던 과제의 최종 정리(노션 작성 및 블로그 정리)를 마무리했다.오전에는 어제 진행한맛집 관리 API

오늘은 Git과 GitHub 기초에 대한 강의를 들었다.이론뿐만 아니라 직접 브랜치를 만들고, PR을 생성하고, 머지까지 실습해보면서GitHub 협업 흐름을 한 번 끝까지 경험해볼 수 있었다.특정 커밋 이후의 모든 기록을 삭제커밋 로그에서 아예 사라짐협업 환경에서는 위

오늘은 어제 진행한 필수 과제를 이어서 하고 도전 과제까지 진행했다.어제 진행한 내용: 나만의 작업 공간 만들기(Branch 생성), PR(Pull Request), Code Review & Merge원격 저장소에 브랜치 올리기\*-u 덕분에 이후엔 그냥 git pus

오늘은 CH2 Java 계산기 과제를 해보았다. 저번 주, 어제 틈틈히 Java 강의를 들어서 오늘 바로 과제를 진행할 수 있었다. 과제 Intro 클래스를 사용하지 않는 계산기: 필수 [STEP 1] : 클래스 없이 자바의 기본 문법만을 사용하여 구현한 계산기

Step2를 진행하기 전에 요구사항을 읽어보니이번 단계의 핵심은 새로운 연산 기능 추가가 아니라계산 로직을 클래스 단위로 분리연산 결과를 컬렉션으로 관리외부에서 필드에 직접 접근하지 못하도록 캡슐화를 적용이라는 생각이 들었다.Step1에서는 App 클래스의 main 메

사용자가 0을 입력할 때까지 숫자를 계속 입력받고프로그램 종료 시 지금까지 입력한 숫자 중 가장 큰 숫자를 출력하는 문제를 플로우차트로 설계사용자로부터 정수 숫자를 반복해서 입력받는다.입력값이 0이면 입력을 종료한다.프로그램 종료 시 지금까지 입력한 숫자 중 가장 큰

Step3 진행

달리기반 1일차 수업에서는 객체지향에 대해서 배웠다.일단 오늘 수업 요약 전에 달리기반 첫 수업 소감을 말하자면 튜터님께서 설명을 해주실 때 찰떡 비유와 함께 진행해주셔서 이해가 정말 잘 되었다.손님(Customer), 바리스타(Barista) 가 있다고 가정손님이 커

1일차에서는 객체끼리 대화(메시징)하는 법을 배웠다면, 오늘은 조금 더 세련된 대화법 "나중에 결정하기"에 대해 배웠다. Step1: 전략 패턴과 클래스의 홍수 전략 패턴의 구조(Structure) 전략 패턴의 핵심은 무엇을 하는가(인터페이스)와 어떻게 하는가(구현

오늘은 스트림에 대해서 배웠다스트림에 대해 정리하기 전 제네릭에 대해 다시 한 번 더 정리를 해보았다.타입을 변수처럼!(Type Safety) 제네릭은 상자를 정의할 때 타입을 확정 짓지 않고, 상자를 실제 사용할 때(생성할 때) 알려주는 방식< T > 는 Typ

오늘부터 Flowchart 문제 풀이가 시작되었다.1일차, 2일차는 개인 문제 풀이3일차에 팀원들과 답안 공유 + 최종 답안 선정 이렇게 진행된다.팀장을 뽑을 때 방법이 2가지가 있었다.1\. 팀 공유 3일 주기마다 돌아가면서 팀장2\. 플로우차트 시작부터 종료까지의

오늘은 총 2문제 풀었다.첫번째 문제는문제 설명:사용자로부터 정수를 입력받아 해당 단의 구구단을 출력하는 프로그램을 설계하세요.학습 포인트:while 루프를 사용한 반복 계산출력 형식 지정입력/출력 정리1) 입력 :정수(1개) - 예: 22) 출력 :입력받은 수의 구구

3일차에는 팀 회의를 진행하였고다시 4일차에 개인 문제 풀이를 시작하였다.1부터 100 사이의 랜덤한 숫자를 생성하고, 사용자가 이 숫자를 맞출 때까지 입력을 반복하는 프로그램을 설계하세요. 매 시도마다 사용자의 입력이 정답보다 큰지 작은지 힌트를 제공합니다.while

기초적인 흐름 제어 및 객체 지향 설계 개념을 복습합니다.커머스 플랫폼의 특성(상품/카테고리/고객/주문/재고)을 고려하여 요구사항을 반영한 클래스 설계단순 기능 구현에 그치지 않고, Product, Category, Customer, CommerceSystem 등 각

Step2 요구사항을 읽어보니, 새로운 기능을 추가하는 것이 아니라 기존 Step1 구조를 개선하는 데 있다고 느꼈다.Main 클래스가 너무 많은 역할을 담당하고 있었고, 입력, 출력, 반복, 종료 흐름이 모두 main 메서드에 몰려 있었다.그래서 Step2에서는 클래

Step3 요구사항을 읽으며 느낀 점은 이제 단순한 상품 출력이 아니라, 상품을 어떤 기준으로 묶고 관리할 것인가에 대한 설계가 중요해졌다는 것이다.Step2까지는 CommerceSystem이 직접 Product 리스트를 관리했지만, 카테고리 개념이 등장하면서 이 구조

Step 4 요구사항을 읽어보니 새로운 기능을 추가하는 것이 아니라, 이미 만들어진 객체들을 더 안전하게 만드는 데 있다고 생각했다.필드에 직접 접근하지 못하도록 막고, Getter 통해서만 데이터를 읽게 하고, 객체의 내부 상태를 외부에서 함부로 변경하지 못하게 하는

필수 기능 구현 이후 Enum, 람다, 스트림을 실제로 적용해보았다.장바구니와 주문 흐름을 실제 서비스처럼 설계하기관리자 모드를 통한 상품 관리 기능 추가Enum을 활용한 고객 등급 관리람다와 스트림을 활용한 데이터 조회 및 관리CommerceSystem에 모든 로직이

문제 설명:간단한 ATM 시스템을 설계하세요. 초기 잔액을 설정하고, 사용자가 입금 또는 출금을 선택할 수 있습니다. 잔액이 0원이 되면 프로그램을 종료합니다.학습 포인트:while 루프와 메뉴 선택잔액 관리 및 종료 조건1) 입력: 메뉴 선택 값(1: 입금, 2: 출

문제 설명:사용자 ID와 비밀번호를 입력받아 로그인을 처리하는 프로그램을 설계하세요. 비밀번호가 3회 연속 틀릴 경우 계정이 잠금 상태가 됩니다.학습 포인트:카운터 변수를 이용한 실패 횟수 추적조건문과 반복문의 조합1) 입력: 사용자 ID사용자 비밀번호2) 출력:로그인
오늘은 사고에 대처하는 프로의 자세 "예외 처리(Exception Handling)"를 배웠다.아이돌 멤버는 6명인데 10번째 정보를 달라고 하면IndexOutOfBoundsException이 발생하며 프로그램이 즉시 종료됨 뒤에 중요한 코드가 있어도 실행되지 않음이때

알고리즘 알고리즘이란? 알고리즘(Algorithm)은 문제를 해결하기 위한 단계적 절차나 규칙을 의미 마치 요리 레시피처럼 시작부터 끝까지 어떤 순서로 무엇을 해야 하는지를 정확하게 적어놓은 것이라고 생각하면 됨 알고리즘의 중요성 논리적 사고력 향상 문제를 해결하는 과정에서 체계적이고 논리적인 사고방식을 기를 수 있음 효율적인 문제 해결 알고리즘 학습을 ...

완전 탐색은 가능한 모든 경우의 수를 전부 확인하여 문제를 해결하는 방법장점구현이 단순하고 이해하기 쉽다모든 경우를 확인하므로 반드시 정답을 찾을 수 있다문제를 처음 접근할 때 좋은 시작점이 됨단점모든 경우를 확인하므로 실행 시간이 오래 걸림경우의 수가 많아지면 현실적

문제 설명:간단한 도서관 대출 관리 시스템을 설계하세요. 사용자는 도서를 대출하거나 반납할 수 있으며, 최대 대출 권수 제한과 연체료 계산 기능이 있습니다.학습 포인트:메뉴 기반 선택 구조상태 관리 및 조건부 처리계산 로직예외 상황 처리1) 입력: 메뉴선택 menu도서

데이터를 일정한 규칙에 따라 체계적으로 저장하고 관리하는 방식데이터를 효과적으로 다루기 위해 만들어진 다양한 규칙과 구조가 자료구조효율적인 데이터 관리많은 양의 데이터를 효율적으로 저장하고 찾을 수 있음데이터의 추가, 삭제, 검색을 더 빠르게 할 수 있음메모리 효율성데

컬렉션 프레임워크는 데이터를 저장하고 처리하기 위한 자료구조 클래스들의 집합Java에서 제공하는 데이터 구조를 표준화한 설계 구조다수의 데이터를 효율적이고 체계적으로 관리할 수 있는 방법을 제공왜 사용할까?1\. 프로그래밍 효율성 \- 이미 구현된 자료구조를 사용

Spring 프레임워크는 Java 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크 -> 간단히 말해 Spring(스프링)이라고 부름Spring은 복잡한 엔터프라이즈급 애플리케이션 개발을 보다 쉽고 효율적으로 할 수 있도록 강력하고 포괄적인 기능을 제공개발자는 Sprin

웹에서 데이터를 주고받기 위한 통신 규약편지를 주고받는 것과 비슷하게, 보내는 사람, 받는 사람, 내용이 정해진 형식으로 전달됨클라이언트는 Request(요청)을 보내고 응답을 기다림서버는 요청에 대한 처리를 수행 후 결과를 Response(응답)함서버는 클라이언트의

어노테이션은 자바 코드에 메타 데이터를 추가하여 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용됨위 코드에서 @Override가 바로 어노테이션만약 Mouse 인터페이스에 존재하지 않는 메서드를 오버라이드하려고 하면 @Overri

이번 과제는 Spring Boot + JPA + MySQL로 “일정(Schedule)” CRUD API를 만드는 것이 목표였다.처음에는 프로젝트 구조부터 헷갈렸고, 의존성/DB 연결/DTO/예외 처리까지 한 번에 하려니까 계속 막혔다.그래서 Step을 나눠서 “하나씩

낮은 응집도 (Low Cohesion): 하나의 서블릿 클래스 내에 HTTP 요청 처리, 비즈니스 로직, 데이터 접근, 응답 생성 로직이 모두 혼재함. 이는 단일 클래스가 너무 많은 책임을 갖게 하여 코드의 이해와 테스트를 어렵게 만든다.강한 결합도 (High Coup

모든 클라이언트 요청을 단일 진입점(Single Point of Entry)에서 처리하는 디자인 패턴요청에 대한 공통 처리(보안, 로깅, 인코딩 등)를 중앙에서 효율적으로 관리할 수 있으며, 개별 요청을 처리할 핸들러(Controller)로 작업을 위임하는 역할을 함전

ViewResolver는 컨트롤러가 반환한 논리적인 뷰 이름을 실제 뷰로 바꿔주는 번역기 역할을 함위 코드에서 return "hello"; 코드는 ViewResolver에 의해 ”/templates/hello.html”이라는 실제 뷰 파일 경로와 매핑됨여기서 “hell

ViewResolver는 컨트롤러가 반환한 논리적인 뷰 이름을 실제 뷰로 바꿔주는 번역기 역할을 함위 코드에서 return "hello"; 코드는 ViewResolver에 의해 ”/templates/hello.html”이라는 실제 뷰 파일 경로와 매핑됨여기서 “hell

백엔드와 프론트엔드의 역할이 분리됨에 따라, 프론트엔드는 화면에 그려낼 Data가 필요백엔드는 주로 이 Data를 JSON 형식으로 내려줌전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용@RestController는 @

여러 사람이 공유하고 사용할 목적으로 한 곳에서 관리되는 데이터의 조직화된 집합으로, 데이터를 소프트웨어에서 효율적으로 관리하기 위한 저장소\-> 데이터의 집합 저장소관계형 DB(RDBMS) 가장 많이 사용하는 데이터베이스데이터를 테이블 형태로 구조화하여 저장하고 관리

ERD는 데이터베이스의 구조를 시각적으로 표현하는 도구쉽게 말하자면, 테이블 구조를 그림으로 보여주는 설계도데이터베이스 구조를 한 눈에 파악할 수 있다.설계를 진행하며 논리적인 오류를 미리 발견하고 수정할 수 있다.데이터 구조를 문서화하여 다른 사람과의 소통을 원활하게

JDBC 자바 프로그램에서 데이터베이스에 접속하고 SQL 문을 실행하기 위한 도구JDBC로 할 경우)JPA로 할 경우)JDBC보다 JPA가 훨씬 간단하고 사용하기 편한 것을 알 수 있음객체 지향 프로그래밍 언어인 Java와 관계형 데이터베이스 간의 패러다임 불일치 문제

3 Layer Architecture는 소프트웨어 시스템을 세 개의 논리적 계층으로 분리하는 아키텍처3개의 레이어로 분리Controller Layer (Persentation Layer라고도 함)Service Layer (Business Layer, Applicatio

스프링 IoC 컨테이너가 관리하는 객체를 의미Spring 컨테이너에 의해 생성, 관리, 소멸됨애플리케이션 전역에서 재사용 가능기본적으로 싱글톤 스코프로 관리싱글톤(Singleton)은 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴애플리케이션 전체에서

인증은 사용자가 누구인지 확인하는 절차시스템에 등록된 사용자인지를 증명하는 과정이라고 할 수 있음웹사이트에 아이디와 비밀번호를 입력하여 로그인하는 것스마트폰 잠금을 지문이나 얼굴 인식으로 해제하는 것건물 출입구에서 신분증을 제시하여 신원을 확인받는 것인증 = 로그인인가

이번 과제는 Spring Boot + JPA + MySQL로 일정(Schedule) CRUD를 만들고,Lv2부터는 User 연관관계, Lv4에서는 Cookie/Session 기반 로그인 인증까지 적용하는 것이 목표였다.Java 17Spring BootSpring Dat

이전 과제에서 기능은 동작했지만, 한 가지 큰 문제가 있었다.예외가 발생하면 대부분 400 또는 500으로만 내려갔다.로그인 안 해도 400존재하지 않는 일정도 400이메일 중복도 500Validation 실패도 기본 에러 페이지이 상태는 동작은 하지만 API답지 않은

팀 프로젝트에서 “백오피스 관리자” 파트를 맡게 되면서, 필수 기능 중 세션 기반 인증(쿠키/세션)을 먼저 구현했다.관리자 회원가입 API (기본 상태: 승인대기 PENDING, 비밀번호 암호화 저장)관리자 로그인 API (세션 생성 및 저장, ACTIVE만 로그인 가

이번 팀 프로젝트에서 내가 맡은 파트는 관리자(Admin) 도메인이었다.초반에는 인증(세션) 기능을 먼저 구현했고, 그 다음 단계로 “관리자 관리 기능” 체크리스트(READ/WRITE)를 끝까지 완성하는 게 목표였다.관리자 체크리스트에서 “Read/Write”는 아래

Lv0: 애플리케이션 실행을 위한 JWT 키/DB 설정Lv1: @Auth AuthUser 파라미터 바인딩을 위한 ArgumentResolver 등록Lv2: 회원가입/로그인 및 비밀번호 검증 로직 리팩토링(가독성/책임 분리)Lv3: N+1 해결 (fetch join ->

Lv5에서 관리자 API 로깅 기능(Interceptor + AOP)을 구현하면서 WebConfig를 수정하였다.이 과정에서 AuthUserArgumentResolver를 생성자 주입 방식으로 관리하도록 구조를 정리하였다.기존 코드에서는 HandlerMethodArgu
Spring 심화 도전 기능 (Lv5 ~ Lv7) 이번 단계에서는 기존 필수 기능 위에 다음 작업을 진행했다. JWT 인증 구조 리팩토링 인증 책임 분리 ArgumentResolver 활용 단위 테스트 작성 테스트 커버리지 측정 단순히 기능을 추가하는 것이 아니라

정의: 서비스를 요청하는 사용자 기기나 소프트웨어예시: 브라우저(크롬, 사파리 등)역할: 사용자의 명령을 받아 서버에 "이 작업을 처리해줘"라고 요청(Request)을 보냄정의: 클라이언트와 서버가 서로 데이터를 주고받을 수 있게 연결해 주는 망예시: 인터넷역할: 클라

단순히 개발이 완료된 상태와 운영 가능한 상태는 다름!최종 목표는 코드의 완성이 아니라, 운영이 가능한 상태로 만드는 것새벽 3시 장애 발생❌ 운영 불가: "서버 들어가서 확인해봐야..." → 2시간 소요✅ 운영 가능: 헬스체크 DOWN → 로그 확인 → 10분 내 원

최종적으로 필수 과제를 끝냈을 때의 구조는 아래와 같다.로컬 개발 단계에서는Spring BootH2로 빠르게 기능을 구현했고,운영 배포 단계에서는EC2 -> 애플리케이션 서버RDS(MySQL) -> 데이터 저장S3 -> 이미지 파일 저장Parameter Store ->

이번 단계에서는 Spring Boot 애플리케이션을 Docker 컨테이너로 실행하고,GitHub Actions를 이용해 코드 Push 시 자동으로 서버에 배포되는 CI/CD 파이프라인을 구축하는 것을 목표로 했다.이 과정을 통해“로컬에서는 되는데 서버에서는 안 되는 문