전체 글 70

서버 이중화의 종류는 무엇이 있을까?

목표 : 서버 이중화 종류에 대해 설명할 수 있다. VM 환경에서는 상용 서버에 대해 이중화 이상을 적용하는 것이 바람직하다. 하나의 서버가 죽더라도 다른 서버가 적절히 실행되어 서비스가 중단이 없어야 하기 때문이다. 그 종류는 사실 다양하다. API 서버의 경우, 부하 분산 등을 생각해 Active-Active 구조로 설정될 수 있지만, Active-standby나, master-slave 구조를 가지는 것도 많다. 그럼 이런 종류들에 대해 정리해 보도록하자. Active-Active 구조 Active 서버의 기준은 현재 정상 동작하고 있는가? 이다. 부하를 분산시켜 줄 수 있는 L4 스위치 등 LoadBalancer가 있고, Active 서버에 요청을 적절히 분배한다. 따라서 부하에 따라, Activ..

Knowledge 2022.08.21

@Transactional은 어떻게 쓰는것일까?

목표 : @Transactional의 사용법을 설명할 수 있다. Transaction을 유지하는 방법 정도로 알고 있는 Annotation에서 벗어나서, 조금 더 자세히 알아보도록 하자. 그동안은 어떻게 써왔는가? 일단 로직이 길 수 밖에 없는 상황에 써왔다. 다시 말해 쓸 수 밖에 없었다. Transactional을 통해 묶어주어야, 2개 이상의 쿼리에 대해 DB Commit 과 Rolback이 가능하도록 관리된다고 알고 있었고, 연동 구간이 길 수 밖에 없는 로직, 예를 들면 기기제어, 각종 로그인, UI를 통한 컨텐츠 변경 등의 작업이 필요할 때마다 Service에서 사용하는 Method에 @Transactional를 설정하여 처리했다. 과연 난 잘 써왔을까? Transaction Transacti..

Framework/Spring 2022.08.21

[Spring] @SpringBootApplication은 무엇이 다를까?

목표 : @SpringBootApplication의 Annotation에 대해 설명할 수 있다. 앞서, Spring 자체가 EJB로 서버개발이 너무 어려워, 그에 대한 대체/보완으로 나온 프레임워크라는 것을 배웠다. 그럼에도 점차 발전한 Spring은 SpringBoot를 내놓으며, 더 간소화된 내용으로 제공하고 있다. 그리고, SpringBoot에는 @SpringBootApplication이 main 실행의 Annotation으로 존재하며, SpringBoot와 Spring을 비교했을 때, 그 차이점에 포함된다. 그럼 무엇이 다른지 알아보자. @SpringBootApplication은 어떻게 생겼을까? @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUN..

Framework/Spring 2022.08.19

[Spring] Filter와 Intercepter의 차이는 무엇일까?

목표 : 스프링의 Filter와 Intercepter의 차이를 설명할 수 있다. 아마 가장 많은 비교와 사용에 대한 질문을 받는 영역 중 하나일 것이다. Filter와 Interceptor는 대체 무엇이길래 이렇게 헤깔리게 하는것일까? 나는 어디에 써보았나? Filter의 경우, 전체 Req/Res 로그를 남기길 원할 때, XSS 를 막을 때, 사용하였고, Interceptor의 경우는 AccessToken에 대한 확인을 요할 때나, 권한에 따라 다른 Menu 정보를 가져오고 싶을 때 사용하였다. 과연 나는 적절한 방법으로 설정하였을까? AOP를 사용해야 하진 않았을까? 하나씩 개념부터 정리하며, 적절했는지를 알아보자. Filter 개념부터 정리 Web Application에서 관리되는 영역으로써 Spr..

Framework/Spring 2022.08.19

[Spring] DispatcherServlet이 뭘까?

목표 : DispatcherServlet에 대해 설명할 수 있다. SpringMVC에 대해 처음 설명하는 사항이 DispatcherServlet이다. 대체 무엇이길래 제일 처음부터 설명하는 것일까? DispatcherServlet SpringMVC는 Spring Framework에 최초부터 들어있던 Servlet API 기반의 웹 프레임워크다. 우선 한번 복습해보자. Servlet Servlet : 정적인 HTML의 한계를 극복하고 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양 Servlet Container : Servlet Interface의 구현체로서, Servlet의 LifeCycle(Init, Destroy, Service)을 구현하고 있으며 구동 환경을 제공하여 S..

Framework/Spring 2022.08.16

Heap 메모리 구조와 GC는 어떻게 될까?

목표 : Heap 메모리와 GC에 대해 설명할 수 있다. 앞선 포스팅으로 JVM 내부 메모리 구조를 알아보았다. 그 중, Heap 메모리에 대한 상세한 설명을 추가하고자 한다. Garbage Collection Heap을 설명한다 했지만, GC부터 알아보려고 한다. Heap과 자연스럽게 연결될 것이며, 일단 용어를 좀 정리해야 설명하기 편할 것 같아서다. JVM은 자동으로 메모리를 관리해준다. GC는 더이상 사용되지 않는 인스턴스(Referrer가 없는 Object)를 찾아 메모리 할당을 삭제하는 행위이다. 이 말은 JVM에서는 GC가 자동으로 일어난다는 것이고, 성능에 중요한 역할을 한다. GC 혹은 메모리 설정이 잘못되면 금방 OOM(Out of Memory) Error가 발생할 것이다. 이 때 말하..

Programming/Java 2022.08.16

JVM의 메모리 구조는 어떻게 될까?

목표 : JVM 메모리 구조를 설명할 수 있다. JVM이 java Virtual Machine 이라는 것은 잘 알고 있다. 다만, 이 구조에 대해 설명을 하려고 하면, 쉽지 않은 부분이 있어 정리하고자 한다. 왜 자바가 많이 사용되었을까? 근본적인 질문일 수 있다. JVM을 설명하기 전에, Java의 특징 중 하나인 OS에 종속적이지 않다는 점을 설명하기 위한 질문이다. 그럼, OS에 어떻게 종속받지 않은 환경을 만들었을까? 어디에서든 Java가 돌아갈 수 있게 감쌀 무언가가 필요했고, 그게 바로 Java Virtual Machine 이라고 하는 JVM이다. Java는 컴파일 언어다. Java의 특징 중 또 다른 하나는 컴파일 언어라는 것이다. 컴파일 언어라 함은, 기계어로 번역하는 과정이 필요하며, 이..

Programming/Java 2022.08.15

[Spring] Bean의 주입은 어떻게 하는게 좋을까?

목표 : Spring Bean 생성자 주입이 많은 이유를 설명할 수 있다. 이전 포스팅으로 Bean 주입에 대해 설명한 적이 있다. 잠깐 다시 정리해보자. Bean의 주입 방법 Bean의 주입 방법은 크게 3가지가 있다. 생성자 주입, Setter를 통한 주입은 앞선 포스팅으로 보았고, 필드를 통한 주입까지 3가지가 있다 Setter를 통한 주입 package com.example.demo.di; import lombok.Data; @Data public class MyBean { private int msg; } package com.example.demo.di; import lombok.Data; import org.springframework.beans.factory.annotation.Autowi..

Framework/Spring 2022.08.14

[Spring] Spring에서 AOP는 어떻게 사용할까?

목표 : Spring에서 AOP를 사용할 수 있다. 앞서, AOP가 무엇인지에 대해 알아보았다. 이제 Spring에서 AOP를 어떻게 쓸 수 있을지 알아보자. Aspect Oriented Programming with Spring 다음 링크에서 Spring에서 AOP에 대한 적용은 다음과 같이 할 수 있다고 한다. Spring provides simple and powerful ways of writing custom aspects by using either a schema-based approach or the @AspectJ annotation style. Both of these styles offer fully typed advice and use of the AspectJ pointcut la..

Framework/Spring 2022.08.13

[Spring] AOP는 뭘까?

목표 : AOP에 대해 설명 할 수 있다. Spring에서는 IoC Container 기능과 더불어, AOP를 아주 중요하게 생각한다. 그럼, AOP가 무엇인지부터 알아가보도록 하자. Aspect Oriented Programming (AOP) 다음 링크를 보면, AOP에 대해 다음과 같이 설명하고 있다. 컴퓨팅에서 관점 지향 프로그래밍(aspect-oriented programming, AOP)은 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. 어떠한 language가 만들어 지기 전에, OOP, Functional Programming 같은 패러다임이 먼저 존재한다. 이 패러다임을 기반으로 특정 Language가 만들..

Framework/Spring 2022.08.13