분류 전체보기

자바

[Java] 자바 빌드

빌드 소스코드를 실행가능한 독립적인 소프트웨어 산출물로 만드는 과정으로 코드를 서버에 올릴 수 있는 상태로 만드는 것 빌드과정 컴파일 : 소스코드(.java)를 바이너리 코드(.class)로 변환 링크 : 클래스 파일들끼리 연결(외부 라이브러리 포함) 패키징 : 연결된 클래스 및 리소스 파일 연결 테스트 : 기능 테스트 빌드 결과 JAR(Java Archive) : 자바애플리케이션 압축 양식, 클래스와 리소스로 구성 WAR(Web Archive) : 웹 애플리케이션 압축 양식 원래 웹 기능이 들어간 자바 애플리케이션은 WAR로 빌드해야하지만 스프링부트는 내장 톰캣을 통해 JAR로 빌드할 수 있게한다. 빌드툴 소스코드의 빌드 과정을 자동으로 처리해주며 외부 라이브러리 의존성 추가 및 관리를 해주는 프로그램..

Computer Science/Network

[Network] REST API

REST Representational State Transfer의 약자로 효율적, 안정적이며 확장가능한 분산시스템을 가져올 수 있는 소프트웨어 아키텍처를 나타내며 HTTP 프로토콜을 HTTP 답게 쓸수있게하는 방법이다. 관련 작성 포스팅 HTTP란? / HTTP Method REST 구성요소 리소스 : HTTP URI 리소스에 대한 행위 : HTTP Method 리소스에 대한 행위의 내용 : 클라이언트와 서버가 데이터를 주고 받는 형태로 JSON, XML 등이 있다. REST의 제약조건 Server - Client SW를 서버, 클라이언트 구조로 나눠 서버는 자원을 갖고 있고, 클라이언트는 서버의 자원을 요청하는 구조 Stateless HTTP 프로토콜이 무상태 프로토콜이기에 당연히 따라오는 제약조건 ..

스프링

[spring] 스프링에서 사용하는 어노테이션

@Component 개발자가 생성한 클래스를 빈으로 등록할 때 사용 @ComponentScan @Component와 하위 어노테이션들을 찾아 스프링 컨테이너에 등록 @Configuration + @Bean @Component 함유, 개발자가 제어가 불가능한 외부 라이브러리를 인스턴스화를 통해 빈으로 등록 @Autowired 스프링 컨테이너에 등록된 빈을 클래스의 타입에 맞게 주입 @Controller @Component 함유, 스프링에게 DDD 계층구조의 프레젠테이션 계층인 컨트롤러 역할 명시 @Service @Component 함유, 스프링에게 DDD 계층구조의 애플리케이션 계층인 서비스 역할 명시 @Repository @Component 함유, 스프링에게 DDD 계층구조의 인프라스트럭쳐 계층인 레포지..

자바

비즈니스 로직

현실세계에서 발생하는 사건 중 SW 서비스를 통해 해결할 문제의 영역을 도메인, 비즈니스라고 한다. 따라서 비즈니스 로직은 현실세계의 문제를 해결하는 로직이 담긴 코드를 의미한다. 비즈니스 로직을 제외한 모든 코드는 비즈니스 로직을 SW에 적용하기 위한 애플리케이션 서비스 로직이라 한다. 웹 프로그래밍의 기초인 커뮤니티, 게시판 도메인을 예로 든다면 비즈니스 로직 글의 CRUD, 회원가입, 로그인 애플리케이션 서비스 로직 클라이언트와 웹 통신을 위한 컨트롤러, 도메인 비즈니스 로직의 호출을 위한 서비스, 서버와 DB를 연결해주는 레포지토리 관점의 분리 둘을 구분하는 이유는 스프링의 삼대 요소 중 하나인 관점의 분리를 위해서이다. 비즈니스 로직과 애플리케이션 서비스 로직을 나눠 응집도를 높히고 결합도를 낮..

자바

추상화 클래스와 인터페이스에 대한 주관적인 생각

1. 문법적 차이 추상화는 변수와 다양한 접근제한자 사용이 가능하다. 둘 다 인스턴스는 생성할 수 없다. 문법적으로는 바뀌어야 하는 값을 가지거나, 접근제한자를 통해 보안성을 높이고 싶을 때 추상화클래스를 사용할 수 있다. 2. 개념적 차이 관련 포스팅 클래스 vs 인터페이스 클래스는 is kind of의 분류의 개념이고 인터페이스는 is able to의 기능추가의 개념이다. 추상화 클래스는 풍부한 개념과 약간의 기능의 추상화를 통해 상속에 우선순위를 둔다. 인터페이스는 기능의 추상화를 통해 다형성에 우선순위를 둔다. 예를들어 동물병원에서 동물과 같이 개념적으로 재사용할 부분은 많지만 실제 객체로 생성되기엔 너무 추상적인 개념일 때 추상화 클래스를 사용할 수 있다. 동물병원에서 취해야할 서비스를 인터페이..

자바

Entity vs DTO vs VO

DTO(Data Transfer Object) 계층간 데이터 교환을 위한 객체로 로직을 가지지 않는 순수한 데이터 객체로 필드와 필드 정보 제공을 위한 메소드만 가진다. 클라이언트에게서 폼을 넘겨받는 컨트롤러 계층 사이, 컨트롤러 계층과 애플리케이션 계층 사이 등 Layer를 오갈 때 사용한다. 자바에선 엔티티의 순환참조를 끊는 역할도 한다. @Getter public class PostResponse { private Long id; private String title; private String content; private String nickname; private String username; private LocalDate createDate; private List commentRespon..

디자인 패턴

[Design] SQL 중심 설계/ DDD 설계

SQL 중심 설계 서비스가 DB 테이블의 구조, DB 동작방식에 의존하는 설계 객체지향과 어울리지 않는 설계로 SQL 중심 설계를 했을 때의 단점들을 살펴본다. 데이터베이스의 구조에 의존 객체지향 세상은 PK, FK를 사용하지 않고 객체 참조를 통해 서로를 바라보지만, DB구조에 의존한 설계는 다음과 같다. class Member{ private Long id; private String name; private Long team_id; // team의 PK를 FK로 들고 있음 } class Team{ // 해당 팀에 속하는 Member를 찾을 때는 FK와 join을 통해 가져옴 private Long id; private String name; } 데이터베이스의 동작방식에 의존 객체 자신이 포함하고 있..

인프라/Docker

[Docker] 운영체제만 올라간 컨테이너를 실행하면 바로 종료되는 이유

도커는 애플리케이션 계층의 추상화로 기술로 컨테이너에서 실행한 응용 프로그램의 실행이 끝나면 컨테이너가 중지된다. 도커 이미지, 도커 파일의 CMD 항목을 통해 컨테이너 실행 시에 응용프로그램을 실행 명령을 설정한다. Ubuntu 이미지는 linux 운영체제의 기본 쉘 프로그램인 bash 쉘 프로그램을 실행한다. 운영체제 이미지는 컨테이너로 실행 시에 STDIN, STDOUT,STDERR 스트림을 컨트롤 해줘야하는데 해당 컨테이너는 따로 실행중인 응용프로그램이 없기 때문에 표준입력을 받을 수 있게 해야 대기 상태로 실행되고, 그렇지 않으면 종료된다. docker run -it를 통해 도커를 사용하는 Host PC의 터미널과 도커 컨테이너의 STDIN을 연결해줘야 한다. -i 컨테이너의 입력(STDIN)을..

비오베베
'분류 전체보기' 카테고리의 글 목록 (8 Page)