기술 면접 준비 개념/SPRING BOOT

기술면접 준비- Spring

luminous_dev 2025. 3. 30. 00:30

MyBatis

: 자바 퍼시스턴스 프레임워크 

: XML이나 어노테이션을 사용하여 저장 프로시저나 SQL 문으로 객체들을 연결 시킴 

 

( 퍼시스턴스 : 애플리케이션 종류 후 실행 시 이전에 저장한 데이터를 다시 불러올수 있는 기술)

 

 

Spring의 특징

1) 제어 역행(IOC)  : 스프링이 사용자 코드를 호출

2) 의존성 주입 (DI) : 느슨한 결합 유지 

3) Spring Framework에서 객체 자원을 효율적으로 관리

4) AOP 를 지원

 

 

 

트랜잭션 

데이터베이스에서 사용되는 쪼갤 수 없는 업무 처리 단위

(분리해서 실행할 수 없음) 

 

 

RESTAPI

API : 

RESTAPI : 웹상에서 URL을 통해 원하는 정보를 얻어오거나 특정한 요청을 하는 것 (사용 설명서 포함)

 

JSON

Restful 서비스의 반환 값은 일반적으로 XML과 JSON활용 

 

AJAX

비동기로 통신하는 JavaScript(JSON) & XML

- 데이터를 실어 다른 페이지로 보내는 것이 불가능

- 기존 페이지를 다시 그리지 않아서 실시간으로 값이 변화하는 작업에 유용 

 

동기화

: 요청한 일이 끝날 때까지 다른 일을 하지 못함

 

비동기화

: 요청해놓고 다른 일을 자유롭게 할 수 있음 

 

 

Dynamic SQL (동적 쿼리) 

상황에 따라 쿼리가 반복되거나 변경되어야 하는 경우 있어서

for문이나 if문 사용이 필요할 때가 있음

 

빌드

개발한 소스가 실행 가능한 프로그램으로 변환하는 작업

빌드하려면 실제로 동작할 수 있는 WAR 파일 만들고 실제 톰캣에 적용해줘야 함 

 

 

내장 톰캣과 외장 톰캣 사용

1. War의 외장 톰캣 실행

- 프로젝트가 톰캣 안에서 동작 

- 가장 일반적

- 외부 Tomcat Webapp폴더에 파일넣기

 

2. War 의 내장 톰캣 실행

- 프로젝트가 하나의 자바 프로그램으로 동작

- 솔루션 형태가 아닌 일반 서비스에서 사용하지 않기 (수용한계 적음)

- java -jar [war 파일 경로]의 명령어로 실행  

 

필드 주입 / 생성자 주입

필드 주입 : @Autowired 

 

생성자 주입 : 

private final BoardService service; // 생성자 주입
public BoardController(BoardService service) {
this.service = service;
}

 

생성자 주입을 권고하는이유

: final을 붙일 수 없으므로 불변성을 보장할 수 없음

: 객체 간 순환 참조를 방지할 수 있음  

 

순환 참조

: 하나의 객체와 다른 객체가 서로를 참조하게 되는 현상

: 일반적인 컨트롤러 > 서비스 > DAO 흐름에선 문제 안 생김

: 다만 서비스끼리 참조하는 경우 순환참조 발생 가능

 

 

스프링 시큐리티 암호화

: 입력값을 SHA-256 알고리즘을 사용하는 해시함수를 이용하여 암호화

 

해시 함수

: input 값을 넣으면 어떤 계산에 이해 output을 반환하는 것

이때 output = 해시 

해시는 output을 통해 input을 추론할 수 없음-> ' 비가역적 '

 

  

📌 AOP(Aspect-Oriented Programming)란?

AOP는 프로그램에서 **공통 기능(예: 로깅, 트랜잭션 관리, 보안 처리 등)**을 비즈니스 로직과 분리하여, 유지보수성과 가독성을 향상시키는 기법입니다.

  • 공통 관심사를 **횡단 관심사(Cross-Cutting Concerns)**라고 하며, 애플리케이션 전반에 걸쳐 여러 곳에서 반복적으로 사용되는 기능입니다.

📌 AOP의 주요 개념

1️⃣ Aspect

  • 공통적인 기능을 담은 모듈입니다. 예를 들어, 로그를 찍거나 트랜잭션을 관리하는 코드가 들어갑니다.

2️⃣ Join Point

  • AOP가 적용될 수 있는 지점을 의미합니다. 메서드 호출 전후, 예외 발생 시 등 특정 시점에 적용 가능합니다.

3️⃣ Advice

  • Join Point에서 수행될 코드입니다. 언제 실행될지, 어떤 동작을 할지 정의합니다.
  • 예: @Before, @After, @Around 어노테이션을 사용한 코드

4️⃣ Pointcut

  • 어떤 Join Point에 Advice를 적용할지를 결정하는 조건식입니다. 특정 메서드에만 적용할 수 있도록 정의합니다.

5️⃣ Weaving

  • Aspect를 실제 코드에 적용하는 과정입니다. Spring AOP는 런타임 시 이 과정을 수행합니다.

📌 AOP의 주요 어노테이션

1️⃣ @Before

  • 메서드 실행 전에 실행되는 어드바이스입니다.
java
복사편집
@Before("execution(* com.example.service.*.*(..))") public void beforeMethod(JoinPoint joinPoint) { System.out.println("Before method execution: " + joinPoint.getSignature()); }

2️⃣ @After

  • 메서드 실행 후에 실행되는 어드바이스입니다. 예외가 발생하든 아니든 실행됩니다.
java
복사편집
@After("execution(* com.example.service.*.*(..))") public void afterMethod(JoinPoint joinPoint) { System.out.println("After method execution: " + joinPoint.getSignature()); }

3️⃣ @Around

  • 메서드 실행 전후에 실행됩니다. 가장 강력하고 유연한 어드바이스입니다. 메서드 실행을 수동으로 제어할 수 있습니다.
java
복사편집
@Around("execution(* com.example.service.*.*(..))") public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("Before method: " + joinPoint.getSignature()); Object result = joinPoint.proceed(); // 실제 메서드 실행 System.out.println("After method: " + joinPoint.getSignature()); return result; }

📌 AOP 예시

1️⃣ 로그를 찍는 Aspect

2️⃣ 트랜잭션을 관리하는 Aspect

📌 AOP의 장점

1️⃣ 공통 기능을 중앙화하여 코드 중복을 줄임
2️⃣ 비즈니스 로직과 공통 기능을 분리하여 코드의 가독성과 유지보수성을 높임
3️⃣ 복잡한 트랜잭션 처리, 로깅, 보안 등을 분리하여 관리 가능

 

Spring에서 @Autowired 어노테이션은 무엇인가요?

Spring에서 **의존성 주입(Dependency Injection, DI)**을 위한 어노테이션입니다.

이 어노테이션을 통해 Spring IoC 컨테이너에서 관리되는 빈(Bean)을 자동으로 주입받을 수 있음 

 

 

📌 @RequestMapping, @GetMapping, @PostMapping의 차이점

1️⃣ @RequestMapping

  • @RequestMapping은 HTTP 요청의 방식(GET, POST, PUT, DELETE 등)과 관계없이 해당 URL 경로에 대한 처리를 지정할 수 있는 어노테이션

 

2️⃣ @GetMapping

  • **@GetMapping**은 HTTP GET 요청에 대해 매핑을 수행하는 어노테이션입니다.
  • 데이터 조회와 관련된 요청에 사용
  • URL에 데이터가 노출되기 때문에 보안에 취약

3️⃣ @PostMapping

  • **@PostMapping**은 HTTP POST 요청에 대해 매핑을 수행하는 어노테이션입니다.
  • POST 방식은 HTTP 요청의 본문(body)에 데이터를 전달
  • URL에 데이터가 노출되지 않으므로 보안상 민감한 정보(예: 비밀번호, 회원가입 데이터 등)를 전달할 때 유리
  • 데이터 수정, 생성 등의 작업 

 

Spring Security란 무엇이며, 어떻게 사용하나요?

 

웹 애플리케이션에 대한 인증과 권한 부여를 관리하는 통합 보안 프레임워크

 

인증 : 사용자의 신원 확인

인가 : 자원에 접근할 수 있는 권한 제어 

 

BCryptPasswordEncoder

 

 

@Transactional 어노테이션의 역할

**@Transactional**은 주로 데이터베이스 작업을 수행할 때, 여러 작업을 하나의 트랜잭션으로 묶어 실행할 수 있게 합니다. 트랜잭션은 데이터베이스의 상태를 변경하는 작업들이 **모두 성공하거나, 하나라도 실패하면 모두 롤백(취소)**되는 특성을 가지고 있습니다. -> 데이터 무결성 유지 가능 

 

Spring에서 @Bean과 @Component의 차이점은 무엇인가요?

@Bean과 @Component는 모두 Spring에서 Bean을 등록하기 위한 어노테이션이지만,

사용되는 방식등록되는 위치가 다름 

 

@Bean은 메서드 수준

@Component는 클래스 수준 -> 단순히 컴포넌트를 등록하는 역할로 @Service, @Mapper,@Controller

 

 

 

Spring Boot와 Spring Framework의 차이점

Spring Framework : 자바 기반의 엔터프라이즈 애플리케이션을 구축하기 위한 프레임워크

Spring Boot:  Spring Framework 위에 구축된 스타터 프로젝트로,

설정을 최소화하고 빠르게 애플리케이션을 실행할 수 있도록 도와주는 도구

 

Spring에서 @RequestParam, @PathVariable, @RequestBody의 차이점

@RequestParam: URL의 쿼리 파라미터 값을 메서드의 파라미터에 바인딩

@PathVariable: URL 경로에서 변수 값을 메서드 파라미터에 바인딩

@RequestBody: HTTP 요청 본문(body)에 포함된 데이터를 객체에 매핑

 

 

 

 

 

기타 질문(정리 중) 

 

String 클래스가 불변(immutable) 클래스인 이유

String 클래스는 불변 클래스로 설계된 이유는 보안, 성능 최적화, 멀티스레드 환경에서의 안전성

 

 

 

 

  • SQL에서 JOIN과 INNER JOIN, LEFT JOIN의 차이점은 무엇인가요?

JOIN: 기본적으로 **INNER JOIN**과 동일합니다. 두 테이블에서 일치하는 값만 반환

INNER JOIN: 두 테이블에서 일치하는 값만 반환하며, 일치하지 않으면 결과에 포함되지 않음

LEFT JOIN: 왼쪽 테이블의 모든 행을 반환하며, 오른쪽 테이블과 일치하는 행이 없으면 NULL 값을 반환

 

  • SQL에서 GROUP BY와 HAVING의 차이점은 무엇인가요?

GROUP BY: 데이터를 특정 컬럼을 기준으로 그룹화

집계 함수(예: SUM(), AVG(), COUNT())를 적용할 수 있음 

HAVING: **GROUP BY**로 그룹화된 데이터에 조건을 적용하는 데 사용

 

  • Spring Boot에서의 배포 방법

 

  • 내장 서버 사용: Spring Boot는 내장 서버(Tomcat, Jetty 등)를 제공하므로, WAR 파일을 별도로 생성할 필요 없이 JAR 파일로 실행할 수 있습니다.
    • 예: java -jar your-application.jar
  • WAR 파일 배포: Spring Boot 애플리케이션을 WAR 형식으로 빌드한 후, 기존의 서블릿 컨테이너(Tomcat, JBoss 등)에 배포할 수도 있습니다.
    • Spring Boot 애플리케이션의 pom.xml에 spring-boot-starter-tomcat 의존성을 추가하고 WAR 형식으로 빌드합니다.