전체 글 111

[SQL] leetCode Department Top Three Salaries

https://leetcode.com/problems/department-top-three-salaries/ Department Top Three Salaries - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 부서별로 연봉순위 3위까지 출력하는 문제입니다. 단 동일한 연봉인 경우 동일 순위로 판단합니다. (1등이 2명이더라도 다음 순위는 2등으로 판별) DENSE RANK 함수를 사용하였습니다. [Oracle 풀이] SELECT D.NAME AS Depart..

[SQL] leetcode Second Highest Salary

https://leetcode.com/problems/second-highest-salary/ Second Highest Salary - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 두번째로 연봉이 높은 직원을 출력하는 문제입니다. 풀이 : rank over 윈도우 함수 사용 [Oracle 풀이] select sum(salary) as "SecondHighestSalary" from ( select salary, rank() over (order by sala..

[SQL] leetcode Trips and Users

문제 : https://leetcode.com/problems/trips-and-users/ Trips and Users - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com banned된 고객이 신청한게 아닌 예약들 중에 취소된 비율을 구하는 문제입니다. 오라클 Oracle 풀이 SELECT request_at as Day ,round(COUNT(case status when 'cancelled_by_driver' then 1 when 'cancelled_by_c..

기본키 생성 전략 @GeneratedValue

@Id @Entity에 기본키 칼럼을 선언하려면 @Id를 사용합니다. 기본키를 직접 할당하려면 @Id만 적어준 뒤 코드에서 직접 set을 해주면 됩니다. 데이터베이스에서 자동으로 생성하게 하려면 @GeneratedValue를 사용해야 합니다. @GeneratedValue는 IDENTITY, SEQUENCE, TABLE 3가지 방식이 있습니다. 원하는 방식을 @GenerateValue의 strategy 속성으로 입력해줍니다. strategy 속성을 적지 않고 @GeneratedValue만 쓰면 GenerationType.AUTO가 적용되고, JPA에서 데이터베이스에 맞는 자동생성 전략을 선택합니다. (MYSQL은 IDENTITY, 오라클은 SEQUENCE) @Entity public class Custom..

JAVA/JPA 2022.02.11

I/O

I/O (input / output) 데이터 입출력 데이터가 들어오는 것 (Input)과 데이터가 나가는 것(Output)을 합쳐 I/O라고 합니다. 자바에서는 스트림, 채널, 버퍼 등을 통해 데이터 입출력이 가능합니다. Stream 스트림 스트림은 물이 한 방향으로 흘러가는 것처럼 단방향으로만 데이터 전송이 가능합니다. (입력과 출력 하나만 가능) 예를 들어 파일의 데이터를 읽고 저장하는 작업을 모두 수행해야 한다면, File Input Stream과 File Output Stream을 2개를 생성해야 합니다. 스트림은 바이트 스트림(Byte Stream)과 문자 스트림(Character Stream)으로 구분됩니다. 바이트 스트림 : 그림, 멀티미디어, 문자 등 모든 종류의 데이터 입출력이 가능함. ..

JAVA/JAVA 2022.02.06

[DDD] 아키텍처 계층과 도메인 구성 요소

아키텍처 계층(Layerd Architecture) 표현 영역 (User Interface Layer) 사용자의 요청을 응용 영역에 전달하고, 처리 결과를 다시 사용자에게 전달하는 역할을 하는 영역입니다. MVC 모델에서 View에 해당합니다. 응용 영역 (Application Layer) 사용자가 사용할 기능을 구현한 영역으로, 도메인 영역의 도메일 모델을 사용합니다. 도메인 영역(Domain Layer) 도메인 모델을 구현한 영역입니다. (핵심 비즈니스 기능을 구현한 영역입니다.) 인프라 영역 (Infrastructure Layer) DB 접근, 메세지 전송 등 기술을 구현한 영역입니다. DIP (Dependency Injection Princple) 아키텍처 계층구조는 상위 계층이 하위 계층에 의존..

JAVA/Architecture 2022.02.02

[DDD] Entity와 Value Object

Entity 엔티티는 식별자(identity)를 가지는 객체(Object)입니다. 예를 들어 도서는 ISBN을 식별자로 같은 Entity가 될 수 있습니다. 엔티티는 식별자를 갖기 때문에, Equals 비교에서 식별자가 값이 같으면 같은 객체로 인식합니다. 엔티티는 데이터 변경 이력을 관리하는 대상입니다. 즉 시간이 지남에 따라 정보를 추적할 수 있는 객체입니다. 식별자 생성 방법 채번 규칙 날짜값+일련번호와 같이 정해진 규칙에 따라 식별자를 만드는 방식 UUID(Universally unique identifier) java.util.UUID 클래스를 이용해서 식별자를 만드는 방식 직접 입력 회원 ID나 전화번호, 이메일 등과 같이 사용자가 입력하는 방식 일련번호 DB의 auto_increment 칼럼..

JAVA/Architecture 2022.01.30

@RequestMapping 과 @Controller

@RequestMapping @Controller @RequestMapping("sample") public class SampleController { @RequestMapping("/process") public ModelAndView process() { return new ModelAndView("view"); } } @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) @RequestMapping이 클래스에 붙은 경우 HandlerMapping에서 매핑정보로 인식합니다. 예를 들어 /sample URL로 요청이 오면 SampleController를 호출합니다. @RequestMapping이 메소드에 붙은 경우 @RequestMappi..

JAVA/Spring 2022.01.26

Spring MVC 구조

1. MVC 패턴 MVC 패턴이란, Model - View - Controller로 이루어진 구조를 말합니다. 애플리케이션(프로그램)을 데이터 영역, 비즈니스 영역, UI 영역으로 역할을 나누어 관리하는 것을 말합니다. 모델(Model) 데이터를 관리하는 역할을 담당하는 객체입니다. 데이터를 담아서 화면에 전달하는 역할을 합니다. 모델을 사용하면, 화면은 비즈니스 로직, 데이터 접근 방법을 몰라도 되기 때문에, 화면 구현에만 집중할 수 있습니다. 뷰(View) 화면을 렌더링하는, UI 영역을 담당하는 객체입니다. HTML 파일을 만들어 웹 브라우저에서 접근할 수 있도록 해줍니다. 컨트롤러(Controller) 비즈니스 영역을 담당하는 객체입니다. 요청을 받아 비즈니스 로직을 처리한 뒤, 결과를 모델에 담..

JAVA/Spring 2022.01.23

스프링 빈과 의존성 주입 (DI)

제어 역전 Inversion Of Control 과 Ioc Container IoC Inversion Of Control 제어 역전이란, 클라이언트 코드 관리하던 의존관계 제어를 프레임워크에서 가져가 관리하는 것을 말합니다. Ioc Container란 프레임워크에서 객체의 생성과 객체 간의 의존관계를 관리하는 컨테이너입니다. 스프링 프레임워크의 ApplicationContext가 대표적입니다. 그리고 스프링의 IoC 컨테이너에서 관리하는 객체를 빈(Bean)이라 합니다. 스프링 빈 등록 @Component와 @Bean 빈을 등록하는 방법은 크게 2가지가 있습니다. 첫 번째로 @Component를 이용해 클래스를 바로 빈으로 등록하는 방법입니다. @Component public class Company {..

JAVA/Spring 2022.01.12