전체 글 76

[백엔드 면접 질문 준비] (6) JVM이란 무엇인가?

JVM이란?JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신(Virtual Machine)입니다. 이름 그대로 물리적인 컴퓨터가 아니라, 프로그램 위에서 동작하는 소프트웨어 기반의 컴퓨터라고 이해할 수 있습니다. 자바로 작성된 코드는 .java 파일로 저장된 뒤, 자바 컴파일러(javac)를 통해 바이트코드(.class)로 변환됩니다. 이 바이트코드는 OS나 하드웨어와 무관한 중간 형태의 코드이며, JVM이 이 바이트코드를 해석하거나 실행합니다. 즉, JVM은 자바 바이트코드를 받아서 실제로 프로그램이 동작하도록 만들어주는 역할을 합니다. 왜 JVM이 필요한가?JVM의 가장 큰 특징은 운영체제(OS)에 독립적이라는 점입니다. 자바는 "한 번 작성하면, 어디서나 실행..

Interview Question 2025.04.05

[백엔드 면접 질문 준비] (5) 프로세스와 스레드의 차이는 무엇인가요?

프로그램 → 프로세스 → 스레드 : 실행 단위의 흐름프로그램 : 아직 실행되지 않은 정적인 파일 (예: .exe, .jar 등)프로세스 : 프로그램이 실행되어 운영체제로부터 자원을 할당받은 단위스레드 : 프로세스가 할당받은 자원을 사용하여 실제로 작업을 수행하는 실행 흐름의 단위코드 덩어리인 프로그램이 실행되면 프로세스가 되고, 그 안에서 작업을 수행하는 흐름이 스레드입니다. 프로세스(Process)란?실행 중인 프로그램으로, OS로부터 독립된 메모리 공간을 할당받음각 프로세스는 Code, Data, Heap, Stack 등의 메모리 공간을 독립적으로 가짐하나의 프로세스는 다른 프로세스에 직접 접근할 수 없음 (보안상 격리됨)예시: 크롬과 카카오톡을 동시에 실행하면 각각 독립적인 프로세스입니다.스레드(T..

Interview Question 2025.04.04

[백엔드 면접 질문 준비] (4) CI/CD란?

1. CI/CD란?- CI: Continuous Integration (지속적인 통합)CI는 여러 개발자들이 각자 개발한 코드를 공통된 저장소에 자주 통합하는 프로세스를 말합니다. 주요 목적은 코드 변경 사항을 빠르게 검증하고, 통합 시 발생할 수 있는 충돌을 최소화하는 것입니다.코드 푸시 시 자동으로 테스트 실행빌드 에러, 문법 오류, 테스트 실패 즉시 확인 가능팀원 간 빠른 피드백과 충돌 방지- CD: Continuous Delivery / Continuous Deployment (지속적인 전달 / 배포)CD는 CI 이후의 단계로, 테스트를 통과한 코드를 실제 운영환경 또는 staging 서버에 자동으로 배포하는 것을 의미합니다.Continuous Delivery: 운영 직전 단계까지 자동화 (운영 ..

Interview Question 2025.04.03

[백엔드 면접 질문 준비] (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

[Project] 학생 시험 채점 기능 개선 - DTO 활용으로 확장성 높이기

학생이 제출한 답안을 채점하는 기존 방식의 문제점 // 학생 시험 채점 @Transactional public void markStudentTest(Long id, StudentTestMarkRequest request) { StudentTest studentTest = getStudentTestById(id); ProblemSet problemSet = studentTest.getProblemSet(); int score = 0; List answerSet = new ArrayList(); // 해답 problemSet.getProblems().forEach(problem -> answerSet.add(problem.getA..

EduClass Project 2025.03.07

[Project] N:M 매핑에서 복합 키(Composite Key)를 사용할 때 주의할 점

복합키(Composite Key) vs 고유 Id JPA에서 N:M 관계를 매핑할 때, 중간 테이블(연결 테이블)에 고유 ID(@Id)를 넣을 것인지, 복합 키(@EmbeddedId)를 사용할 것인지 고민하는 경우가 많다. 처음에는 "그냥 @Id를 넣고 auto_increment 하면 되지 않나?"라고 생각할 수 있지만, 이 방식은 데이터 무결성과 성능 문제를 초래할 수 있다.본 글에서는 복합 키(Composite Key)를 사용할 때의 장점과 @Id 방식이 가지는 문제점을 분석해보겠다. N:M 관계에서 중간 테이블의 역할ProblemSet(문제지)와 Problem(문제)은 N:M 관계이다.따라서 ProblemSetToProblem이라는 중간 테이블이 필요하다.이때, 이 테이블의 고유 식별자(PK)를 어..

EduClass Project 2025.03.05

[Spring] JWT(JSON Web Token) 방식과 주의할 점

JWT 의 필요성과 등장 배경JWT는 클라이언트-서버 간의 인증 정보를 안전하고 간편하게 전달하기 위해 고안되었습니다. 특히, 서버가 상태를 관리하지 않는(stateless) 환경에서 확장성과 성능 면에서 큰 이점을 제공합니다. JWT(Json Web Token) 은 통신 정보를 JSON 형식을 사용하여 안전하게 전송하기 위해 사용됩니다. JWT는 토큰 자체에 정보가 포함되어 있는 클레임 기반 토큰입니다. 일반적인 애플리케이션에서 JWT는 주로 인증과 인가를 구현하기 위해 사용됩니다.  JWT의 구조JWT는 헤더, 페이로드, 시그니처로 구분됩니다. 헤더에는 토큰의 암호화 알고리즘이나 타입을 가지며, 페이로드에는 데이터(만료일, 사용자 정보 등)을 가집니다. 시그니처는 헤더와 페이로드가 변조되지 않았는지 ..

SPRING 2025.03.05