반응형

Spriong Boot Devtools

Devtools는 Spring Boot에서 코드가 수정되면 어플리케이션을 재실행해야 되는 불편한 점을 해결할 수 있도록 제공되는 모듈입니다.

 

설정 방법

1) build.gradle의 dependencies에 내용 추가

 

17번째 줄에 있는 내용 추가

 

2) Settings > Advanced Settings > Allow auto-make to start even if developed application is currently running 체크

 

 

3) Settings > Build, Execution, Deployment > Complier > Build project automatically 체크

 

 

반응형
반응형

Spring(혹은 Spring Boot)으로  포트폴리오 어떻게 만들어야 되는지 물어보는 친구들이 꽤 있어서 제가 만드는 순서를 적어봅니다! 물론, 저도 주니어 개발자고 모르는 부분이 많기 때문에 제가 만드는 순서는 분명 틀린 부분이 많이 있을 겁니다. 참고 정도로만 읽어주세요. 포트폴리오이기 때문에 왜 이런 환경을 구성했는지 설명할 수 있어야 해서 설명도 첨부합니다. 가장 중요한 건 자기 스스로 만들고 자기만의 사이트를 어떻게 만들었는지 설명하는 능력이니 이 부족한 글에 의존하시는 분은 안 계시겠지만서도 혹시 계신다면 그러지 마시길!

 

1. 환경 구성

너무 당연하지만 개발 환경을 세팅해야 합니다. 포트폴리오의 완성은 개발하여 배포까지 하는 것이기 때문에 마무리까지 어떤 프로그램들이 필요한지 생각하고 준비해야 합니다. 제 프로젝트 환경은 아래와 같습니다.

 

IDE(통합개발환경) : IntelliJ Ultimate(유료 버전)

- 설명 : 젯브레인에서 만든 IDE로 플러그인 추가 및 DB 접근 기능 등 이클립스와 큰 차이가 있지는 않지만 툴팁을 열 때 자주 렉이 걸리는 이클립스보다 프로그램 자체가 가벼워 선호하게 되었습니다. 무료 버전은 HTML, JSP와 Java Script 및 CSS 등 일부 자동완성을 지원하지 않기 때문에 유료 버전 Ultimate를 사용하고 있습니다.

 

소스 코드 편집기 : Visual Studio Code(퍼블리싱 목적)

- 설명 : 퍼플리싱 목적으로 사용합니다. 인텔리제이 얼티메이트 버전에서는 퍼블리싱에 필요한 기능도 제공하지만 퍼블리싱 학습 때 사용했던 환경이 VS Code였기 때문에 익숙하여 사용중입니다.

 

개발 언어 : Java 1.8

- 설명 : 자바 버전 중에서 가장 보편적이고, 배포 서버인 Cafe24가 1.8 환경이기 때문에 선택하였습니다.

 

프레임워크 : Spring Boot

- 설명 : 스프링 레거시 프로젝트에 비해 다룰 초기 설정이 적습니다. 톰캣이 내장되어 있고 의존성을 추가할 때도 Starter가 붙은 의존성을 추가하면 필요한 관련 라이브러리를 자동으로 추가해주므로 간편합니다. 다만 톰캣이 내장되어 있어 서블릿으로 동작하는 JSP를 권장하지는 않습니다. 하지만 초기 설정 하나만으로도 스프링 레거시 프로젝트보다 개발 속도가 빨라지기 때문에 사용하고 있습니다.

 

데이터베이스 : MariaDB

- 설명 : MySQL이 Oracle에게 인수되면서 등장한 DBMS입니다. MySQL과 거의 동일하게 동작하며 배포 서버인 Cafe24에서 MariaDB를 사용하기 때문에 선택했습니다.

 

데이터베이스 관리툴 : MySQL Workbench

- 설명 : DB를 GUI 환경에서 사용할 수 있게 해주는 툴입니다. 툴 내에서 권한 부여가 안 된다거나 일부 기능을 사용할 수 없는 문제가 MariaDB에서 발생하지만 학습 때 계속 사용하던 툴이라 익숙하여 선호하고 있습니다. 

 

DB 접근 기술 : JPA

- 설명 : 객체 관계 매핑 기술입니다. 객체들의 관계를 통해 SQL을 자동으로 생성해주며 세계적으로 MyBatis보다 많이 사용되고 있습니다. JpaRepository를 통해 간단하게 CRUD를 구현할 수 있습니다.

 

View 템플릿 : JSP

- 설명 : HTML에 JSP 코드를 추가하여 페이지를 동적으로 만드는 템플릿입니다. 톰캣이 있어야 동작하고 스프링 부트에서는 공식적으로 지원하지 않으며 권장하지도 않습니다. 스프링 부트에서는 타임리프나 머스태시 같은 템플릿을 권장하지만 한국은 SPA(Single Page Application, React.js나 Vue.js)를 사용하지 않는 이상 템플릿으로는 아직 JSP를 많이 사용하기 때문에 선택하였습니다. 스프링 부트에서 권장하지 않을쭌 패키징을 War로 하면 정상적으로 작동합니다.

 

배포 서버 : Cafe24

- 설명 : AWS와 네이버 클라우드와 같은 클라우드 플랫폼으로 구성하면 더 좋은 포트폴리오가 될 수 있지만 Cafe24 호스팅 센터를 이용하면 클라우드 시스템을 이용할 때 필요한 Java, MariaDB, Tomcat 설치가 기본적으로 이뤄져 있어 간편하기 때문에 선택하였습니다. AWS 사용에 익숙해지면 Cafe24에서 변경할 수도 있습니다. 

 

FTP 접속 툴 : Filezilla

- 설명 : FTP 서버에 접속하기 위한 툴입니다.

 

SSH 접속 툴 : Putty

- 설명 : SSH 서버에 접속하기 위한 터미널 툴입니다.

 

2. 프로젝트 생성

포트폴리오를 위해 스프링부트 프로젝트를 생성합시다. Spring Initializr 사이트(https://start.spring.io/)에서 프로젝트를 구성할 수 있습니다. 인텔리제이 얼티메이트 버전을 사용하면 사이트에 접속하지 않아도 인텔리제이 내에서 구성 가능합니다.

 

1) 빌드 : Gradle

 

2) 언어 : Java

 

3) 스프링 부트 버전 : 2.6.3

 

4) 의존성 : Spring Web, Spring Data JPA, MariaDB Driver, Lombok, Spring Security

 

5) application.properties : 배포 서버인 Cafe24에서 생성된 DB와 연결합니다.

 

 

3. 스프링 부트에서 JSP 사용

앞에서 언급하였듯 스프링 부트에서는 JSP를 공식적으로 지원하지 않기 때문에 따로 설정해줘야 합니다. 관련 내용을 따로 작성해두었으니 아래 링크를 참고하여 설정하세요!

 

https://developer-rooney.tistory.com/192?category=476321

 

 

4. 패키지 구성

가장 필수적인 패키지 구성

main/java/최상위 패키지 밑에 controller, entity, repository, service 패키지를 생성합니다. 각각의 패키지가 하는 역할을 고려하여 어떻게 개발할지 생각해봅시다.

 

예를 들어, 전체 게시글이 나오는 페이지를 메인에 보여주고 싶다면 우선 controller 패키지에 HomeController 클래스를 만들고 기본 Url로 접속 시 메인으로 이동할 메소드를 하나 만들어 줘야 합니다. 그리고 메소드가 리턴할 JSP 페이지도 필요하겠죠? 퍼블리싱이 다 되었다는 가정 하에 데이터를 가져오려면 페이지 생성 후 뭐부터 해야할 지 생각해봅시다. DB에서 데이터를 가져오기 위한 BoardRepository를 repository 밑 패키지에 작성해야 됩니다. 그런데 우리는 JPA를 사용하고 BoardRepository는 JpaRepository를 상속 받아야 하는데 이 때 해당 테이블의 Entity와 해당 Entity의 기본키 타입이 되는 클래스를 알아야 하기 때문에 Entity를 먼저 작성해줘야 합니다.

 

5. 테이블 생성

엔티티 작성을 위해 MariaDB에 테이블을 생성해주세요. 생성한 테이블의 컬럼에 맞춰서 프로젝트 엔티티를 작성해야 합니다.

 

 

* 작성중

반응형
반응형

이번에 면접 볼 때 나온 질문이었습니다. WAS는 톰캣을 쓰니까 알고 있었는데 Web Server를 설명하지 못해 멘탈이 나가서 알고 있던 WAS까지 설명을 못하는 참사가 발생했습니다. 다음에는 그런 실수를 하면 안 되니 저도 알아보고 다른 분들께 도움을 드릴 수 있으면 해서 간단하게 정리합니다.

 

WAS(Web Application Server)

DB 조회 및 다양한 로직 처리 요구 시 동적인 컨텐츠를 제공하기 위해 만들어진 어플리케이션 서버를 말합니다. 대표적으로 톰캣이 있습니다. WAS는 웹 컨테이너 혹은 서블릿 컨테이너로도 불리며 JSP는 서블릿으로 변환되어 동작하기 때문에 WAS 즉, 톰캣이 없으면 읽어올 수 없습니다.

 

WAS는 프로그램 실행 환경 및 DB 접속 기능을 제공하고 여러 트랜지션 관리 및 업무 처리를 위한 비즈니스 로직을 수행합니다.

 

종류 : Tomcat, JBoss 등

 

 

Web Server

웹 서버는 하드웨어와 소프트웨어로 구분됩니다. 하드웨어에서는 Web 서버가 설치되어 있는 컴퓨터를 가리키고 소프트웨어에서는 웹 브라우저 클라이언트로부터 HTTP 요청을 받고 정적인 컨텐츠(HTML, CSS 등)를 제공하는 프로그램을 가리킵니다. 웹 서버는 WAS를 거치지 않고 요청에 맞게 정적인 컨텐츠나 동적 컨텐츠 제공을 위한 요청을 전달합니다.

 

종류 : Apache, Nginx 등

반응형
반응형

자바는 현재 17버전까지 공개되었지만 자바 개발에서 아직까지 표준으로 자리잡고 있는 1.8(8버전)에서 대표적으로 어떤 기능이 추가되었는지 알아봅시다.

 

Interface 변화

자바 1.8 이전에는 Interface가 public abstract 메소드만 허용했으나 static과 default 메소드를 사용할 수 있도록 변경되어 원래 Interface는 설계도로써의 역할로 추상 메소드만 갖을 수 있었으나 default라는 키워드를 사용하여 일반 메소드도 작성할 수 있게 되었습니다.

 

 

람다식 추가

람다식이란 익명 함수(Anonymous function)을 지칭하는 용어입니다. 자바에서는 함수 대신 메소드라는 키워드를 사용하므로 이름을 갖지 않는 메소드를 가리키는데 람다를 사용하므로써 불필요한 반복문의 삭제가 가능해지고 가독성이 높아지게 됩니다. 또한 메소드를 만드는 과정 없이 한 번에 처리할 수 있어지므로 생산성이 높아지고 병렬 프로그래밍이 용이합니다. 다만, 재사용이 불가능하고 디버깅이 어려우며 람다를 남발하면 비슷한 함수가 가지는 중복성이 발생할 수 있어 코드 또한 지저분해질 우려가 있습니다.

 

// 기본 형태
Man man = (String name) -> {System.out.println("이름 : " + name);}
man.intro("루니");

// 실행 블럭 제거
Man man = (String name) -> System.out.println("이름 : " + name);
man.intro("루니");

// 단일 매개 변수는 타입 생략 가능
Man man = (name) -> System.out.println("이름 : " + name);
man.intro("루니");

// 매개 변수가 하나일 때 매개 변수를 감싸는 괄호 생략 가능
Man man = name -> System.out.println("이름 : " + name);
man.intro("루니");

// 매개 변수가 없는 람다식은 괄호를 무조건 기재
Man man = () -> System.out.println("매개변수가 없는 람다식");

 

Optional 클래스 추가

Optional 클래스가 추가됨에 따라 NullPointerException의 발생 가능성에 대한 방지를 간결하게 해결할 수 있게 되었습니다.

 

기존에 null 값을 방지하기 위하여 if문을 사용했을 때 아래와 같은 코드가 나옵니다.

 

List<String> serviceList = boardService.getList();

List<String> list = null;

if(serviceList.size() != 0) {
    list = serviceList;
}

 

하지만 Optional을 사용하여 아래 코드처럼 간결하게 처리할 수 있습니다.

 

List<String> list = boardService.getList().orElseGet(()-> new ArrayList<>());

 

반응형

+ Recent posts