sagecode 57

[백엔드 면접 질문 준비] (3) HTTP 상태 코드에 대해 말해보세요.

HTTP 상태 코드(Status Code)란?HTTP 상태 코드는 클라이언트의 요청에 대해 서버가 응답하는 "처리 결과"를 숫자로 알려주는 방식입니다. 총 5가지 범주로 나눌 수 있습니다.1xx (Informational): 정보 제공100 Continue: 요청의 일부를 받았고, 나머지를 계속 보내도 됨2xx (Success): 성공200 OK: 요청이 성공적으로 처리됨201 Created: 리소스가 성공적으로 생성됨 (POST 사용 시 자주 등장)204 No Content: 성공했지만 반환할 데이터가 없음 (DELETE 등)3xx (Redirection): 리다이렉션301 Moved Permanently: 리소스가 영구적으로 다른 위치로 이동함302 Found: 임시로 다른 URL에서 응답함4xx (..

Interview Question 2025.04.02

[백엔드 면접 질문 준비] (2) HTTP METHOD에 대해서 설명해 보세요.

HTTP(HyperText Transfer Protocol)는 클라이언트와 서버 간의 통신을 위한 프로토콜로, HTTP 메서드는 이 통신에서 요청의 '의도'를 표현합니다. 즉, 클라이언트가 서버에 "어떻게 해줘!"라고 요청하는 방식을 정의합니다. 주요 HTTP 메서드 소개- GET기능: 서버에서 리소스를 조회합니다.특징: 안전하고 멱등합니다. (요청을 여러 번 해도 결과가 같음)예시: /users/1 → ID가 1인 사용자 정보 조회- POST기능: 서버에 리소스를 생성합니다.특징: 멱등하지 않음. (같은 요청을 여러 번 보내면 데이터가 중복 생성될 수 있음)예시: /users에 사용자 정보 전달 → 새로운 사용자 생성- PUT기능: 리소스를 "전체" 수정합니다.특징: 멱등함.예시: /users/1에 사..

Interview Question 2025.04.02

[백엔드 면접 질문 준비] (1) DI와 IoC에 대해 설명해보세요.

Dependency Injection (의존성 주입)DI(의존성 주입)는 객체의 의존성을 외부에서 주입받는 기법입니다. 의존관계란? 'A가 B를 의존한다' 라고 했을 때, B가 변하면 A에도 영향을 끼치는 관계를 의미합니다. 특정 기능이나 서비스를 외부에서 받아와서 사용하는 방식인데요. DI를 사용하면 클래스 내부에서 새로운 객체를 직접 생성하는 대신 외부에서 필요한 객체를 받아 사용할 수 있습니다. 이를 통해 모듈 결합도를 낮추고 코드 재사용성과 테스트 용이성을 향상할 수 있습니다. 의존성 주입 방법 - 생성자 주입 방식class Eat { private Fruit fruit; public Eat() { this.fruit = new Fruit(); }}위 코드와 같이 E..

Interview Question 2025.03.31

[Project] 복합 키 적용 전후, MySQL 성능 차이 실험 - MySQLWorkBench

복합 키를 쓰면 정말 쿼리 성능이 좋아질까?JPA에서 N:M 관계를 설계할 때, 중간 테이블에 고유 ID(@Id)를 쓸지, 복합 키(@EmbeddedId)를 쓸지는 꽤 자주 마주치는 고민이다.이전 포스팅(복합 키를 사용할 때 주의할 점)에서는 주로 설계적인 장점을 다뤘다면, 이번엔 성능을 실제로 수치화해서 비교해봤다. 실험 배경EduClass에서 ProblemSet(문제집)과 Problem(문제)은 N:M 관계를 갖는다. 이를 위해 중간 테이블 problem_set_to_problem을 설계했는데, 초기엔 단순하게 id를 기본 키로 쓰는 방식으로 구성했다. 하지만 두 가지 문제가 발생했다:중복 등록 방지 불가→ 동일한 문제집-문제 조합이 여러 번 삽입됨조회 성능 저하→ problem_set_id로 검색 ..

EduClass Project 2025.03.25

[JPA] 영속성 관리(Entity Manager, Entity Factory, Persistence Context)

Entity Manager와 Entity FactoryJPA는 크게 Entity와 테이블을 매필하는 설계 부분과 매핑한 Entity를 실제 사용하는 부분으로 나눌 수 있다.// Entity Factory 생성EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa"); Entity Manager는 Entity를 저장하고, 수정하고, 삭제하고, 조회하는 등 Entity와 관련된 모든 일을 처리하는 관리자이다.// Entity Manager 생성EntityManager em = emf.createEntityManager();Entity Factory는 이름 그대로 Entity Manager을 만드는 공장이다. 공장을 만드는 비용은 상당히 ..

DATABASE 2025.02.16

[Project] (4) API 구현(@RequestParam vs @PathVariable)

@GetMapping 사용법@GetMapping("/api/problem-set/{id}")public ResponseEntity getProblemSet(@PathVariable Long id) { ProblemSet problemSet = problemSetService.getProblemSet(id); // 서비스에서 문제지 조회 return ResponseEntity.ok(new ProblemSetResponse(problemSet));}동작 방식GET /api/problem-set/1 이런 요청이 들어오면{id}에 1이 들어감@PathVariable Long id가 1을 받음problemSetService.getProblemSet(1)이 실행됨@RequestParam과 차이점은?@Pa..

EduClass Project 2025.02.07

[Project] (3) 프로젝트 시작(MVC 패턴, 디렉토리 구조)

엔터티의 구조를 바꿨다. 일단 user의 타입을 따로 인가테이블에서 관리할 수 있도록 만들었다. 로그인 시 타입에 따라서 다른 테이블에 있는 데이터에 접근할 수 있다. 학생과 학부모의 관계가 n:m 관계이므로, 중간에 연결할 수 있는 학생-학부모 테이블을 생성하였다.관리자 테이블의 속성을 많이 줄였다.이제부터는 이 Entity들을 코드로 변환하기 위한 spring project 구조에 대해서 알아보자. MVC 패턴MVC 패턴은 Spring 프로젝트를 구성할 때, 역할에 따라서 Model, Controller, View로 로직을 분리하여 사용하는 패턴이다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있으며, 좀 더 나은 관리를 하기 위해 사용한다.일단 각각을 알아보기 전에 소프트웨어가 이..

EduClass Project 2025.02.05

[SQL] YEAR()은 효율적인가?

처음으로 SQL 프로그래머스 문제들을 풀어보기 시작했다.  정보처리기사 공부할 때 DML, DCL, DDL 공부를 하면서 잠시 쿼리문을 작성하는 것을 해보았지만 이렇게 직접 예시문제를 풀다보니 실력이 훨씬 더 빨리 느는것 같았다.근데 이렇게 문제를 풀다가 보니 구글링하면서 배운 함수들이나 방식들은 엄청 다양해서 한 문제를 푸는 방법에도 다양한 방법이 있다는 사실을 알게 되었다. 그래서 이런 쉬운 문제를 풀때도 방식마다 장단점이 어떤게 있는지 리뷰해보려고 한다. 1. AND 나열과 YEAR()SELECT COUNT(*) USERSFROM USER_INFOWHERE AGE >= 20 AND AGE 처음에 내가 접근했던 방식이다. 처음에 20세 이상 29세 이하를 어떻게 표현해야하지 하다가 그냥 범위 AND문..

DATABASE 2025.01.26

[Project] (2) 프로젝트 시작(Entity 설계, 변수명)

프로젝트 이름은 EduClass로 붙였다.일단 이 서비스 자체가 대학생들이 사용하는 온라인 클래스와 비슷해서 그렇게 부르게 되었다. EduClass를 시작할 데이터베이스를 정리했다. 처음에는 Entity를 구성할 때 좀 막막했던 것 같다. 일단 pk, fk의 개념이 확실히 와닿지 않다보니 중복해서 넣는 속성들이 많아지니 복잡해졌다. 예를 들어보자.처음에는 user의 분류를 3개로 나눴다. '학생', '학부모', '관리자''학생'은 강의를 듣고 시험을 보는 user.'학부모'는 본인의 학생의 강의 수강 상황과 시험 점수를 열람할 수 있는 user'관리자'는 학생과 학부모의 정보를 관리하고 문제와 강의를 편집할 수 있는 user 각각의 email과 pw를 속성으로 만들었다. 그럴 경우 로그인을 할 때 ema..

EduClass Project 2025.01.24

[Spring] Spring Boot Container란 무엇인가?

1. 컨테이너(Container)를 왜 사용하는가?객체 간의 의존성 문제 해결소프트웨어 개발에서 객체 간의 의존성은 필수적이다. 그러나 객체가 서로 강하게 결합되어 있으면 코드 변경 시 모든 연관된 코드가 수정되어야 하는 문제가 발생한다. Spring Boot의 컨테이너는 객체 간의 의존성을 주입해주는 역할을 하여 이런 문제를 해결한다.코드의 모듈화와 유지보수성 향상컨테이너는 객체 생성을 개발자가 직접 처리하지 않도록 하여 코드의 모듈화를 지원합니다. 이는 객체 간의 결합도를 낮추고, 유지보수성과 확장성을 향상시킨다.개발자 작업의 단순화컨테이너는 애플리케이션의 객체 생성과 의존성 주입, 생명주기 관리를 자동으로 처리한다. 개발자는 비즈니스 로직 구현에 집중할 수 있으며, 반복적인 작업에서 벗어날 수 있다..

SPRING 2024.12.26