본문 바로가기

항해 99

(151)
WIL-10 Fact : 이번주 있었던 일, 내가 한 일 월 : 카드, 턴 로직 수정, 가비지 컬렉터, 자바 맵 구조 학습 화 : 카드 정보 유저 개인 별로 메시지 보내도록 수정, Spring AOP 학습 수 : GameController 입력 값 변경, 코드 설계 정리, Spring Context 학습 목 : 게임 종료 시 유저 선택 로직 변경, Spring MVC, IoC / DI 학습, 모의 기술 면접 2회차 금 : 백엔드 코드 리뷰, 중간 발표 템플릿 작성, Spring PSA 학습 토 : 즉시로딩, 지연로딩, N+1 문제 해결 방법 학습, 중간 발표 준비 및 중간 발표 Feeling : 나의 감정적인 반응, 느낌 게임 로직에 관해 추가적으로 수정 및 개선해야 할 부분이 많다고 느낌 내가 구현한 코드에 대해 ..
즉시로딩, 지연로딩, N+1 문제 즉시 로딩과 지연 로딩 즉시로딩(Immediate Loading)과 지연로딩(Lazy Loading)은 데이터베이스에서 데이터를 조회하는 방식 중의 하나로, 객체 간의 연관관계를 어떻게 로딩하고 관리할 것인지에 대한 개념이다. 즉시로딩(Immediate Loading): 엔티티를 조회할 때 해당 엔티티와 연관된 모든 엔티티를 조회하는 방식 A 엔티티와 B 엔티티가 연관되어 있을 때 A를 조회하면 B도 함께 조회되고, 이로 인해 객체 간의 관계가 필요한 시점에 바로 사용할 수 있다 조인 등의 복잡한 쿼리가 생성될 수 있고, 불필요한 데이터 로딩으로 인해 성능 문제가 발생할 수도 있다 지연 로딩(Lazy Loading): 객체를 Proxy로 가져온 후 실제 해당 객체를 사용하는 시점에 초기화, 연관된 엔티티..
기술면접 준비 2주차 정리 질문 - 답변 형식으로 정리 클래스와 인스턴스의 차이에 대해 설명해주실 수 있을까요? 클래스는 객체를 정의하는 템플릿 또는 설계도입니다. 속성(변수)과 행위(메서드)를 정의하여 객체의 기본 형태와 기능을 설명합니다. 예를 들어, '자동차' 클래스에는 색상, 브랜드, 모델 등의 속성과 가속하기, 정지하기 등의 행위가 정의될 수 있습니다. 클래스는 실제 데이터나 상태를 저장하지 않으며, 객체의 구조와 행동만을 정의합니다. 인스턴스는 클래스에 정의된 구조와 행동을 실제로 가지는 구체적인 객체입니다. 클래스를 기반으로 메모리에 할당되며, 실제 데이터와 상태를 포함합니다. 클래스를 사용하여 인스턴스를 생성하면, 그 인스턴스는 해당 클래스의 모든 속성과 행위를 상속받아 사용할 수 있습니다. 예를 들어, '자동차' ..
기술면접 준비 1주차 정리 질문 - 답변 형식으로 정리 Call by reference란 무엇이고 보통 어떻게 쓰이나요? "Call by value"는 메소드에 변수를 전달할 때 해당 변수의 값이 복사되어 메소드 내에서 사용됩니다. 이 때문에 메소드 내에서 변수 값을 변경해도, 호출한 측의 변수에는 영향을 주지 않습니다. 반면, "Call by reference"는 메소드에 변수의 참조(메모리 주소)를 전달하여, 메소드 내에서의 변경이 호출한 측의 변수에도 영향을 줍니다. 하지만 자바에서는 기본적으로 "Call by value" 방식을 사용하며, 객체 참조가 값으로 전달됩니다. 즉, 자바는 진정한 의미의 "Call by reference"를 지원하지 않습니다. 스프링에서는 주로 객체 참조를 전달하여 메소드 호출을 처리합니다. 이 ..
Spring PSA PSA(Portable Service Abstraction) 환경의 변화와 관계 없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조 특정 클래스가 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 PSA의 기본 개념 PSA가 적용된 코드는 개발자의 기존에 작성된 코드를 수정하지 않으면서 확장할 수 있으며, 어느 특정 기술에 특화되어 있지 않은 코드이다. Spring에서 동작할 수 있는 라이브러리들은 POJO 원칙을 지키기 위해 PSA 형태의 추상화가 되어 있으며, Spring Web MVC, Spring Transaction, Spring Cache, Spring Data, 메일 서비스 등의 다양한 PSA를 제공하고 있다. Spring Web MVC 일반적인 서블릿의..
Spring MVC, IoC/DI Spring MVC MVC 패턴 MVC 패턴은 애플리케이션을 개발할 때 사용하는 디자인 패턴 애플리케이션의 개발 영역을 MVC(Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식 MVC 패턴을 도입하면서 UI 영역과 도메인(비즈니스 로직) 영역으로 구분되어 서로에게 영향을 주지 않으면서 개발과 유지보수가 가능하다 MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다. MVC 패턴을 사용하는 이유 사용자가 보는 페이지, 데이터 처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤 3가지로 구성되는 하나의 애플리케이션을 만들면..
Spring Context Spring Context 스프링이 관리하는 Bean들이 담겨있는 컨테이너 스프링의 가장 큰 특징 중 하나가 IoC 컨테이너를 통해 객체의 생성을 관리하는 것으로 Context가 Container의 일종임 Container란? Container에는 Bean Factory와 이를 상속한 Application Context 2가지 유형이 있음 Bean Factory Pre-Loading 방식 Bean 객체를 생성하고 관리하는 기본적인 기능 Application Context Lazy Loading 방식 트랜잭션 관리, 메시지 기반의 다국어 처리, AOP 처리 등 Spring Container 사용 이유 모든 Context는 싱글톤으로 관리되어 유일한 객체로 관리됨 Lazy Loading으로 Servlet C..
Spring AOP AOP(Aspect-Oriented Programming) AOP는 관점(Aspect) 지향 프로그래밍으로, 관점을 기준으로 다양한 기능을 분리하여 보는 프로그래밍. 관점(Aspect)이란, 부가 기능과 그 적용처를 정의하고 합쳐서 모듈로 만든 것 AOP의 목적 관점지향 프로그래밍은 객체지향 프로그래밍을 보완하기 위해 쓰임, 기존 객체(Object) 지향은 목적에 따라 클래스를 만들고 객체를 만들었다. 따라서 핵심 비즈니스 로직이든, 부가 기능의 로직이든 하나의 객체로 분리하는데 그치고, 이 기능들을 어떻게 바라보고 나눠 쓸지에 대한 정의가 부족하다는 단점이 있음 보통 비즈니스 웹 애플리케이션이라면 사업에 핵심적인 핵심 비즈니스 로직이 있고, 애플리케이션 전체를 관통하는 부가 기능 로직이 있으며 이를 횡..