본문 바로가기
[JAVA] Layered Pattern 1. Layered(계층화) 패턴이란? N-Tier 패턴이라고도 부르는 소프트웨어 아키텍쳐 패턴으로 가장 일반적으로 사용되는 패턴이다. 일반적으로 4개의 표준 계층으로 구성되지만, 특별히 계층의 수와 유형을 지정하지는 않는다. 계층화 패턴의 핵심은 구성 요소들 간의 관심사 분리이다. 각 계층은 인접한 계층과만 연결되며, 더 먼 계층과는 격리된다. 이를 통해 종속성을 낮추고, 독립성을 높여 애플리케이션의 SOLID 원칙을 지키고, 트랜잭션의 영속성을 보장할 수 있다. ※ SOLID 원칙 : https://melll.tistory.com/15 필요할 때 필요한 걸 찾아쓰면 빠른데, 왜 격리시키는 걸까? 이는 격리를 통한 유지보수의 강점이 더 크기 때문이다. 웹 페이지를 교체하고 싶다면 HTML 파일을 교체하.. 2023. 2. 20.
[JAVA] Scope 1. Scope란? Scope란 웹 애플리케이션이 동작하는 동안 데이터를 기억하는 범위를 말한다. 애플리케이션을 만들 때, 데이터들의 사용 범위를 판단해 적당한 Scope를 설정해주어야 한다. 각 Scope별로 Servlet API가 제공하는 내장 객체의 setAttribute / getAttribute 메소드를 통해 값을 저장하여 사용한다. getAttribute의 Return Type은 Object이기 때문에, 적당한 타입으로 형변환을 하여 사용한다. 2. Scope의 종류 Page Scope PageContext 내장 객체를 통해 사용한다. 데이터를 해당 페이지에서만 사용하고 지운다. Redirect는 물론이고, 페이지를 forward할 때에도 저장되지 않는다. 지역 변수처럼 해당 jsp나 서블릿이.. 2023. 2. 18.
[JAVA] JSP Scriptlet 1. Scriptlet이란? .jsp 파일은 기본적으로 Html 코드를 기본으로 하기 때문에, Java 코드를 적기 위한 방법으로 Scriptlet을 사용한다. Scriptlet 내부에 작성된 코드는 WAS(Web Application Server)에 의해 .java로 컴파일되는 과정에서 Java코드 그 자체로 남는다. .jsp 에서 .java 로 컴파일되는 모습을 살펴보자. (WAS는 톰캣이다.) test.jsp ↓ test_jsp.java (test.java 가 아닌 test_jsp.java가 된 걸 주목하자. tomcat의 명명 방식이다.) public final class test_jsp extends org.apache.jasper.runtime.HttpJspBase implements org... 2023. 2. 17.
[JAVA] Servlet & JSP 1. Sevlet이란? Server + Applet의 합성어로, Java를 사용해 웹 페이지를 동적으로 만들기 위한 서버 측 파일이다. 주로 보여지는 파일이 아닌 로직을 구현해서 넘겨주는 역할을 한다. Spring 프로젝트의 Spring으로 구현된 Java 파일에 대응되는 역할로 쓰인다. MVC 패턴의 M(Model)과 C(Controller)를 구현한다. Model은 주로 확장자 패턴을 활용하여 URI Mapping을 하고, Controller를 통해 조작된다. 로직을 수행한 Model은 Redirect나 Forward를 통해 JSP로 넘겨준다. Servlet의 형태 @WebServlet("/test.do") public class Example extends HttpServlet { private s.. 2023. 2. 16.
[JAVA] Proxy Pattern 1. 프록시(Proxy) 패턴이란? 프록시란 컴퓨터 네트워크에서 다른 서버 상의 자원을 찾는 클라이언트로부터 요청을 받아 중계하는 서버를 말한다. 프록시 패턴에서 프록시는 이와 마찬가지로 다른 객체가 수행해야 할 일을 프록시에게 요청해 대신 수행해주는 인터페이스의 역할을 하는 클래스이다. 객체 A가 객체 B를 사용하고자 할 때, 객체를 직접 참조하는 것이 아닌 그 객체에 대응되는 프록시를 통해 접근하므로, 객체 B가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있으며, 객체 B의 생성을 원하는 시점까지 미룰 수 있다. 프록시 패턴은 초기화 지연, 접근 제어, 로깅, 캐싱 등에 다양하게 응용이 가능하다. 2. 프록시(Proxy)의 장단점 장점 메모리가 큰 객체가 로딩되기 전에 프록시를 통.. 2023. 1. 27.
[JAVA] Socket 1. 소켓(Socket)이란? 프로세스 간의 통신에 사용되는 양 쪽 끝단(Endpoint)을 의미한다. 서로 멀리 떨어진 두 사람이 통신하기 위해선 전화기가 필요한 것처럼, 프로세스 간의 전화기 역할을 해주는 것이 소켓이다. 소켓이 프로세스들의 전화기라면, 서버소켓은 전화교환기로 비유할 수 있다. 양방향 통신으로 채팅, 동영상 스트리밍, 게임 등에 이용된다. TCP/IP 프로토콜에서는 Socket과 ServerSocket 두 가지를 사용해 데이터 통신 환경을 만든다. Socket 프로세스 간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다. 두 스트림을 통해 입출력 통신이 이루어진다. ServerSocket 포트와 연결(bind)되어 사용자의 연결 요청을 기다리고, 요청이.. 2023. 1. 26.
[JAVA] Singleton Pattern 1. Singleton 패턴이란? Singleton이란 '단독 개체', '정확히 하나의 요소만 갖는 집합' 등의 의미로, 특정 클래스의 객체(인스턴스)가 오직 한 개만 존재하도록 구현한 클래스를 말한다. 객체(인스턴스)를 하나만 생성하게 함으로써 프로세스의 메모리 낭비를 방지할 수 있다. 또한, 생성된 객체는 전역성을 띄기 때문에 서로 다른 객체들 간 공유가 가능하다는 장점이 있다. 하지만, 싱글톤을 사용함으로써 각 클래스들은 서로에 대한 결합도가 높아져 객체지향 5원칙의 개방-폐쇄 원칙(OCP)에 위배된다는 단점이 있다. 싱글톤 패턴 구현 예제 싱글톤 구현 (1) - 동기화의 문제 public class Singleton1 { private static Singleton1 instance = null;.. 2023. 1. 24.
[Spring] IoC & DI 1. IoC(Inversion of Control, 제어의 역전)이란? 개발자가 직접 객체의 생명주기(Lifecyle)를 관리하거나, 의존성 주입(DI)을 하던 것을 Spring의 Container가 대신 해주는 것. 제어권이 개발자에게서 Container로 넘어갔다 하여, 제어의 역전이라 한다. 2. DI(Dependency Injection, 의존성 주입)이란? 각 객체들이 서로 상속받거나 참조하게 되면 의존성이 생기게 되는데 이러한 것을 객체에 명시적으로 작성하는 것이 아니라 Spring Framework의 Container가 대신 해주는 것을 DI(Dependency Injection)이라 한다. 하나의 클래스에서 두 객체를 서로 다른 방법으로 인스턴스화 하는 걸 보자. public class D.. 2023. 1. 20.
[JAVA] MVC Pattern 1. MVC 패턴이란 ? 소프트웨어 아키텍쳐 패턴 중 하나로, 어플리케이션을 Model-View-Controller 3개의 서브 시스템으로 구조화하는 패턴이다. 사용자 인터페이스로부터 비즈니스 로직을 분리하여 어플리케이션의 시각적 요소나 그 이면에서 실행되는 로직을 서로 영향 없이 쉽게 고칠 수 있도록 구현한다. 컴포넌트를 분리하여 코드의 효율적인 재사용을 가능케 한다. 여러 개의 뷰를 필요로 하는 대화형 어플리케이션에 적합하다. 각 구성요소의 역할 - 모델(Model) : 핵심 기능과 데이터 보관한다. 상태에 변화가 있을 때, 컨트롤러와 뷰에 통보한다. 이를 통해 뷰는 최신의 결과를 보여주고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 실행한다. - 뷰(View) : 사용자에게 정보를 보여주는 .. 2023. 1. 17.
[JAVA] 객체 지향 설계의 5가지 원칙 - SOLID 원칙 1. 객체 지향 설계의 5가지 원칙 (SOLID 원칙) SOLID 원칙을 반드시 지켜져야 하는 것은 아니지만, 잘 지켜진 코드는 유지보수 측면에서 엄청난 강점을 가진다. 단일 책임의 원칙 (Single Responsibility Principle, SRP) : 하나의 클래스는 하나의 목적을 위해서 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 한다. 이는 어떠한 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다는 것과 상통하며, 이 원리를 적용하면 책임 영역이 확실하기 때문에, 한 책임의 변경에서 다른 책임의 변경으로의 연쇄작용으로부터 자유로울 수 있다. 개방 폐쇄의 원칙 (Open Closed Principle, OCP) : 객체는 확장에는 열려있.. 2023. 1. 16.
[JAVA] 객체 지향 프로그래밍 (OOP) - 특징 1. 객체 지향의 특징 캡슐화 데이터를 보호하기 위해 연관된 데이터와 함수를 하나로 묶어 다른 객체의 접근을 제한하는 것. 이를 통해, 데이터의 손상과 오류 발생을 최소화시킬 수 있어, 독립성이 유지되고 응집도가 높아지며 객체 간 결합도는 낮아진다. 캡슐화된 객체의 행위는 외부에서 볼 때, 실제가 아닌 추상적인 것이 되므로 정보 은닉 개념이 지켜진다. 객체 지향에서는 기본적으로 어느정도 은닉화가 이루어져야 그 의미가 살아나므로, '잘 모르겠다' 싶을 때에는 private을 선언해둔 상태에서 해당 객체의 변수나 메소드가 외부에서 필요로 할 경우에 적절하게 개방해주는 것 또한 방법이다. JAVA에서는 접근 제한자를 통해 캡슐화를 구현한다. 접근제한자 내용 private 선언된 객체 내부에서만 사용이 가능하며.. 2023. 1. 15.
[JAVA] Thread (3) - Synchronize 1. 동기화 (Synchronization) 멀티 쓰레드 프로세스는 여러 쓰레드가 하나의 프로세스 내에서 자원을 공유하여 작업하기 때문에 서로의 작업에 영향을 끼치게 된다. 이로 인한 문제들을 방지하기 위해 서로 간섭하지 못하도록 임계 영역(Critical Section)을 만들어 주는것을 쓰레드의 동기화(Synchroniztion)이라 한다. 임계 영역은 락(Lock)을 얻은 단 하나의 쓰레드만 출입이 가능하다. (객체 1개 당 락은 단 한 개만 존재한다.) synchronized로 임계 영역을 설정하는 두 가지 방법 1. 메소드 전체를 임계 영역으로 지정 : public synchronized void method() { } 2. 특정한 영역을 임계 영역으로 지정 : synchronized(객체의 참.. 2023. 1. 12.
반응형