전체 글

오리 시뮬레이션 게임, SimUduck 모든 오리가 꽥꽥 소리를 낼 수 있고(quack()), 헤엄을 칠 수 있으므로(swim()) 오리를 슈퍼 클래스로 작성을 했어요. 오리마다 모양이 다르기 때문에 모양을 나타내는 메소드는 추상 메소드로 만들고 상속받는 클래스에서 오버라이드 하기로 했습니다. 오리 시뮬레이션 게임 차별화하기. 다른 회사보다 차별화를 위해 오리가 날 수 있도록 해야 한다. 가장 간단한 방법으로 Duck에 날 수 있는 메소드만 추가하면 모든 오리가 그걸 상속받기 때문에 Duck에 fly()메소드 추가를 해요. 문제 발생 Duck의 몇몇 서브클래스만 날아야 하는데 날아다니면 안 되는 오리에게도 날아다니는 기능이 추가됐습니다. 슈퍼클래스의 일부만 고쳤는데, 프로그램 전체에 고무오리가 날아다니는..
· 스프링
N + 1 문제란 연관 관계가 설정된 엔티티를 조회할 경우 조회된 데이터의 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 이를 N+1문제라고 한다. 실제 발생하는 경우를 살펴보자. package com.test.test; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @NoArgsConstructor public class Board { @Id @GeneratedValue(strategy = Gene..
· 스프링
Springboot + JPA 활용해 과제를 진행하던중 entity를 화면 단에 직접적으로 노출하면 안 된다는 영한 님의 강의 내용이 생각이 났다. 그때는 그냥 강의를 듣고 열심히 코드를 따라 치기만 했지 왜지? 라는 의문점은 다음으로 넘기고 이번에 과제 도중 그런 상황이 생겨서 한 번 정리해보자. 우선 entity와 dto를 알아보자. entity란 실제 DB 테이블과 매핑되는 핵심 클래스. DB 테이블에 존재하는 칼럼들을 필드로 가지는 객체. dto란 DTO(Data Transfer Object) 계층(Layer)간 데이터 교환을 위해 사용되는 객체 DB에서 데이터를 가져와 Service 및 Controller 등으로 전송할 때 사용하는 객체 불필요한 데이터 노출 Entity를 데이터 request ..
인증 인증은 사용자가 누구인지 확인하는 단계. 인증의 대표적인 예로 '로그인'이 있으며 로그인은 DB에 등록된 id와 pw를 사용자가 입력한 id와 pw와 비교해서 일치 여부를 확인하는 과정이다. 로그인에 성공하면 애플리케이션 서버는 응답으로 사용자에게 토큰을 전달하고 실패한 사용자는 토큰을 전달받지 못해 원하는 리소스에 접근할 수 없다. 인가 인가는 인증을 통해 검증된 사용자가 애플리케이션 내부의 리소스에 접근할 때 사용자가 해당 리소스에 접근할 권리가 있는지 확인하는 과정이다. 일반적으로 사용자가 인증 단계에서 발급받은 토큰은 인가 내용을 포함하고 있으며, 사용자가 리소스에 접근하면서 토큰을 함께 전달하면 애플리케이션 서버는 토큰을 통해 권한 유무 등을 확인해 인가를 수행한다. 접근 주체 접근 주체는..
RestTemplate RestTemplate은 스프링에서 HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿이다. HTTP 서버와의 통신을 단순화한 이 템플릿을 이용하면 RESTful 원칙을 따르는 서비스를 편리하게 만들 수 있다.RestTemplate은 기본적으로 동기 방식으로 처리되며 비동기 방식으로 사용하고 싶을 경우 AsynRestTemplate을 사용하면 된다. RestTemplate의 특징 HTTP 프로토콜의 메서드에 맞는 여러 메서드를 제공한다 RESTful 형식을 갖춘 템플릿이다 HTTP 요청 후 JSON, XML, 문자열 등의 다양한 형식으로 응답을 받을 수 있다. 블로킹 I/O 기반의 동기 방식을 사용한다 다른 API를 호출할 떄 HTTP 헤더에 다양한 값을 설정할 수 있다. Res..
· 스프링
연관관계 매핑 연관관계 매핑 종류와 방향 OneToOne : 일대일 OneToMany : 일대다 ManyToOne : 다대일 MantToMany : 다대다 DB에서는 두 테이블의 연관관계를 설정하면 외래키를 통해 서로 조인해서 참조하는 구조로 생성되지만 JPA를 사용하는 개체지향 모델링에선 엔티티 간 참조 방향을 설정할 수 있다. DB와 관계를 일치시키기 위해 양방향으로 설정해도 무관하지만 비지니스 로직의 관점에서 봤을 때 단방향 관계만 설정해도 해결되는 경우가 많다. 단방향 : 두 엔티티의 관계에서 한쪽의 엔티티만 참조하는 형식 양방향 : 두 엔티티의 관계에서 각 엔티티가 서로의 엔티티를 참조하는 형식 연관관계가 설정되면 한 테이블에서 다른 테이블의 기본값을 외래키로 갖게 되는데 이런 관계에서는 주인이..
JPAL JPQL은 JPA에서 사용할 수 있는 쿼리이다. JPQL문법은 SQL과 매우 비슷하며 DB쿼리에 익숙하다면 어렵지 않게 사용 가능하다. SLQ과의 차이점은 테이블이나 칼럼의 이름대신 엔티티 객체를 대상으로 수행하는 쿼리익 때문에 매핑된 엔티티 이름과 필드 이름을 사용한다. 쿼리 메서드 쿼리 메서드는 크게 동작을 결정하는 주제(Subject)와 서술어(Predicate)로 구분된다. 'find...By', 'exist...By'와 같은 키워드로 쿼리의 주제를 정하고 'By'는 서술어의 시작을 나타내는 구분자 역할이다. 서술어 부분은 검색 및 정렬 조건을 지정하는 영역이다. ex) (리턴타입) + {주제 + 서술어(속성)} 구조의 메서드 List findByLastnameAndEmail(String..
ORM ORM은 Object Relational Mapping의 줄임말로 객체 관계 매핑을 의미한다. 자바와 같은 객체지향 언어에서 의미하는 객체와 RDB의 테이블을 자동으로 매핑하는 방법입니다. 클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 때문에 RDB 테이블과 어쩔 수 없는 불일치가 존재하는데 ORM은 이 둘의 불일치와 제약사항을 해결하는 역할이다. ORM의 장점 1. 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다. 쿼리문을 작성하는 양이 현저히 줄어 개발 비용이 줄어든다 객체지향적으로 DB에 접근할 수 있어 코드의 가독성이 높아진다 2. 재사용 및 유지보수가 편리하다 ORM을 통해 매핑된 객체는 모두 독립적으로 작성되어 있어 재사용이 용이하다 객체들은 각 클래스로 나뉘어 ..
백수왕
비전공자에서 주니어 개발자까지