목록분류 전체보기 (37)
JaPark Bug World
3.1 스프링부트 3 구조 살펴보기 스프링 부트는 각 계층이 양 옆의 계층과 통신하는 구조를 따른다. (자세한 내용은 교재 79p 참조) 계층이라는 것은 각자의 역할과 책임이 있는 어떤 소프트웨어의 구성 요소를 의미한다. 각 계층은 소통할 수 있지만 다른 계층에 직접 간섭하거나 영향을 미치지 않는다. 프레젠테이션 계층 (Controller) HTTP 요청을 받고 이 요청을 비즈니스 계청으로 전송하는 역할이다. 컨트롤러는 스프링 부트 내에 여러 개가 있을 수 있다. 비즈니스 계층 (Service) 모든 비즈니스 로직을 처리한다. 서비스를 만들기 위한 로직이며, 웹 사이트에서 벌어지는 모든 작업, 발생하는 예외 등 프로세스를 구현하기 위한 로직 등. 퍼시스턴스 계층(Repository) 모든 데이터베이스 관..
@SpringBootApplication 이해하기 @SpringBootApplication public class SpringBootDeveloperApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDeveloperApplication.class, args); } } 이 클래스는 자바에의 main() 메서드와 같은 역할이다. 여기서 스프링 부트가 시작이 된다. @SpringBootApplication 애너테이션을 추가하면 스프링 부트 사용에 필요한 기본 설정을 해준다. SpringApplication.run() 메서드는 애플리케이션을 실행한다. 첫번째 인수는 스프링 부트3 애플리케이션의 메인 클래스로..
스프링 부트 스타터 살펴보기 스프링 부트 스타터는 의존성이 모여 있는 그룹이다. 스타터를 사용하면 필요한 기능을 간편하게 설정할 수 있다. 스타터는 spring-boot-starter-{작업유형} 이라는 명명규칙이 있다. 스타터 설명 spring-boot-starter-web Spring MVC를 사용해서 RESTful 웹 서비스를 개발 할 때 필요한 의존성 모음 spring-boot-starter-test 스프링 애플리케이션을 테스트하기 위해 필요한 의존성 모음 spring-boot-starter-validation 유효성 검사를 위해 필요한 의존성 모음 spring-boot-starter-actuator 모니터링을 애플리케이션에서 제공하는 다양한 정보를 제공하기 쉽게 하는 의존성 모음 spring-b..
2.1 스프링과 스프링 부트 스프링의 등장 엔터프라이즈 애플리케이션은 대규모의 복잡한 데이터를 관리하는 애플리케이션을 의미한다. 소프트웨어 분야가 발전하면 엔터프라이즈 애플리케이션은 점점 복잡해졌다. 많은 사용자의 요청을 동시에 처리해야 하므로 서버 성능과 안정성, 보안이 매우 중요하다. 이런 것들을 신경쓰면서 비즈니스 로직까지 개발하기가 매우 어려워 개발에만 집중 할 수 있도록 2003년 6월 스프링 프레임워크가 등장했다. 스프링 프레임워크는 서버 성능, 안정성, 보안을 매우 높은 수준으로 제공하는 도구이다. 스프링을 더 쉽게 만들어 주는 스프링 부트 스프링은 장점이 많은 개발 도구이지만 설정이 매우 복잡하다는 단점이 있다. 이러한 단점을 보완하기 위해 스플이 부트를 출시 했다. (2013년 4월) 스..
1.1 서버와 클라이언트 클라이언트란? 서버로 요청하는 프로그램을 모두 뜻한다. 대표적으로 웹 브라우저가 그 중 하나이다. 주소창에 주소를 입력하고 엔터를 눌러 정보를 요청하는 행위를 '서버에 요청한다'고 할 수 있다. 서버란? 서버는 클라이언트의 요청을 받아 처리하는 주체이다. 클라이언트측에서 요청한 데이터를 주거나, 요청만 처리할 수도 있다. 1.2 데이터베이스 데이터베이스는 여러 사람이 사용할 목적으로 데이터를 한 군데에 모아놓고 관리하는 데이터 저장소이다. 대표적으로 MySQL, 오라클, postgreSQL 등이 있다. (근데 정확히는 이것들이 데이터베이스가 아니라고 한다.) 데이터 베이스를 관리하기 위한 시스템의 이름이다! RDB란? 데이터베이스를 여러 가지로 구분할 수 있는데 RDB, NoSQ..
메소드 레퍼런스 람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메소드 참조하는 방법 스태틱 메소드 참조 타입::스태틱 메소드 특정 객체의 인스턴스 메소드 참조 객체 페퍼런스::인스턴스 메소드 임의 객체의 인스턴스 메소드 참조 타입::인스턴스 메소드 생성자 참조 타입::new 메소드 또는 생성자의 매개변수로 람다의 입력값을 받는다. 리턴값 또는 생성한 객체는 람다의 리턴값이다. 이해를 돕기 위해 만들어 둔 Greeting Class public class Greeting { private String name; public Greeting() {} public Greeting(String name) { this.name = name..
람다 표현식 람다 (인자 리스트) -> {바디} 인자 리스트 인자가 없을 때 : () 인자가 한개일 때 : (one) 또는 one 인자가 여러개 일 때 : (one, two) 인자의 타입은 생략 가능, 컴파일러가 추론(infer)하지만 명시 가능, (integer one, integer two) // 인자가 없을 시 Supplier getTen = () -> 10; // 인자가 한개 일 시 Function oneParam = (i) -> i; // 인자가 여러개 일 때 BiFunction biFunc = (integer, integer2) -> integer + integer2; 바디 화살표 오른쪽에 함수 본문을 정의한다. 여러 줄인 경우에 {}를 사용해서 묶는다 한 줄인 경우에 생략 가능, return..
자바에서 제공하는 함수형 인터페이스 Java가 기본으로 제공하는 함수형 인터페이스 java.lang.function 패키지 자바에서 미리 정의해둔 자주 사용할만한 함수 인터페이스 Function BiFuncion Consumer Supplier Predicate UnaryPerator BinaryOperator 함수 인터페이스를 만들지 않고 자바에서 미리 정의해둔 함수를 가지고도 구현이 가능하다. Function T 타입을 받아서 R 타입을 리턴하는 함수 인터페이스 R apply(T t) import java.util.function.Function; public class Plus10 implements Function { @Override public Integer apply(Integer integ..
함수형 인터페이스와 람다 표현식 소개 함수형 인터페이스(Functional interface) 추상 메소드를 딱 하나만 가지고 있는 인터페이스 SAM(single Abstract Method) 인터페이스 @FunctionalInterface 애노테이션을 가지고 있는 인터페이스 // @FunctionalInterface 사용하여 오로지 추상메서드 하나만 존재하도록 명시 @FunctionalInterface public interface RunSomething { // abstract는 생략할 수 있다. void doIt(); } > @FunctionalInterface을 선언하게 되면 메소두가 2개인 경우 error 발생 람다 표현식(Lambda Expresstions) 함수형 인터페이스의 인스턴스를 만드..
* 해당 내용은 인프런 이펙티브 자바 완벽 공략 1부 백기선님의 영상을 기준으로 작성하였습니다. https://inf.run/fnnRy 백기선 이펙티브 자바 완벽 공략 1부 강의 - 인프런 자바 학습의 끝판왕 “이펙티브 자바”를 보다 쉽고 완벽하게 학습하세요. 이 강의를 수강하시면 여러분의 자바 프로그래밍 지식과 실력뿐 아니라 학습 능력 또한 향상 시킬 수 있습니다., MS 시 www.inflearn.com 두번째 방법 : private 생성자 + 정적 팩터리 메서드 두번째 방법 : private 생성자 + 정적 팩터리 메서드 장점1. API를 바꾸지 않고도 싱글턴이 아니게 변경할 수 있다. 장점2. 정적 팩터리를 제네릭 싱글턴 팩터리로 만들 수 있다. 장점3. 정적 팩터리의 메서드 참조를 공급자(Sup..