나동빈 저자의 '이것이 취업을 위한 코딩 테스트다' 책의 내용을 미래의 코테 직전의 내가 참고할 수 있는 요약본으로 정리하려 한다. 그 첫 번째 오늘은 '그리디 알고리즘'에 대해 공부하자. 바로 시작해보자. 그리디 알고리즘이란? 그리디 알고리즘은 '탐욕법'이라는 말로 '현재 상황에서 지금 당장 좋은 것만 고르는 방법'을 의미한다. 매 순간 가장 좋아 보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 그리디 알고리즘은 기준에 따라 좋은 것을 선태하는 알고리즘이므로 문제에서 '가장 큰 순서대로' 등의 기준을 티나지 않게 제시해준다! 대체로 정렬과 같이 사용하였을 때 만족시킬 수 있으므로 정렬 알고리즘과 짝을 이뤄 출제된다! 그럼 이제 그리디 알고리즘에 대해 학습했으니 다음 ..
인프런 김영한 T의 실전! 스프링 부트와 JPA 활용1 강의를 들으며 연관관계 매핑 과정에 대해 정리한다. erd 설계 후 엔티티 매핑 과정시에 내가 참고할 용도로 제작하였다. 독자들도 erd 설계 후 이 방식에 맞춰 엔티티 클래스를 개발하면 될 것 같다. 바로 들어가보자. 📌 @--ToMany ✔ (mappedBy = "") 적용 ✔ 예시 @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List orderItems = new ArrayList(); 📌 @--ToOne ✔ (fetch = LAZY) 적용 ✔ @JoinColumn(name="") 적용 ✔ 예시 @OneToOne(fetch = LAZY, cascade = CascadeTy..
오늘은 @Enumerated란 무엇이며 언제 어떻게 사용해야하는지 알아보자. 엔티티 매핑에서 Enum 타입을 사용할 때 @Enumerated 어노테이션을 사용하는데 우선 @Enumerated 어노테이션의 종류는 두 가지이다. ✔ EnumType.ORIGINAL : enum 순서(숫자) 값을 DB에 저장 ✔ EnumType.STRING : enum 이름 값을 DB에 저장 예시를 들어보자. 다음과 같은 enum 클래스에서 어노테이션의 종류가 EnumType.ORIGINAL이라면 ORDER ==> 1로 저장 CANCEL ==> 2로 저장된다. 어노테이션의 종류가 EnumType.STRING이라면 "ORDER", "CANCEL" 로 저장된다. ❌ 근데 EnumType.ORIGINAL은 함부로 사용할 수 없다. ..
오늘은 @Embedded는 무엇이며 언제 어떻게 사용하는지에 대해 알아보자. 바로 시작해보자. 🔥 회원 엔티티가 다음과 같다고 가정해보자. 회원 엔티티는 이름, 도시, 주소 번지, 주소 우편번호를 가진다. 이때 도시, 주소 번지, 주소 우편번호는 회원의 '주소'를 알기 위해 가지는 컬럼들이다. 이때 상세 데이터(도시, 주소 번지, 주소 우편번호) 또한 하나의 객체로 묶어 보다 객체지향적으로 설계할 수 있다. 도시, 주소 번지, 주소 우편번호를 주소라는 객체로 묶어 표현하면 보다 객체지향적인 코드가 될 것이다. 이때 사용하는 것이 @Embedded, @Embeddable이다. @Embeddable @Getter public class Address { private String city; private S..
오늘은 백준 11047 문제를 포스팅하겠다. 바로 들어가보자. 🔥 백준 문제 보기 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 그리디 알고리즘이 코딩 테스트 유형으로 많이 출제된다고 하여 풀어보았다. 생각보다 간단한 문제였다. 바로 코드를 살펴보자. 😊 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.uti..
엔티티 설계시 주의할 점에 대해 학습한 내용을 정리한다. 같이 알아보도록 하자. ✔ 엔티티에는 가급적 Setter를 사용하지 말자! - Setter는 변경 가능하기 때문에, 유지보수가 어렵다. ✔ 모든 연관관계는 지연로딩으로 설정하자! - 즉시로딩(Eager)은 예측이 어렵고, 어떤 SQL이 실행될 지 추적하기 어렵다. 특히나 JPQL을 실행할 때 N+1 문제가 발생할 수 있다! @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이르모 직접 지연로딩으로 설정해야한다! ✔ 컬렉션은 필드에서 초기화하자. - null 문제로부터 안전하기 때문이다. 별 내용 없어 보여도 굉장히 중요한 내용이니 꼭 기억하자!! 그럼 오늘도 열심히 개발하자. 🔥
오늘은 캡스톤 프로젝트를 진행하다 querydsl로 검색 기능 구현 중 booleanBuilder가 동작하지 않는 에러를 해결한 포스팅을 진행해보려고 한다. 말로 설명하기 어려운 부분이 있어서 최대한 코드로 열심히 설명할텐데 부디 많은 분들에게 도움이 되었으면 한다. 그럼 바로 들어가보자. 우선 에러 코드는 다음과 같다. Pageable 기능을 이용해서 Paging 기능을 구현하고 paging에 따른 동적 쿼리를 작성해야 하기 때문에 BooleanBuilder를 이용해서 다음과 같은 메서드를 작성했다. 그런데 저 메서드와 다음과 같은 메서드에서 BooleanBuilder를 인식하지 못하는 에러가 발생했다. 에러메세지는 뭐 당연히 저 줄에서 에러가 난다는 것이었고 BooleanBuilder를 인식하지 못한..
강의를 듣다 테스트 케이스를 실행했는데 다음과 같은 에러가 발생했다. 무슨 에러이며 어떻게 해결할까? 🤔 같이 확인해보자. 우선 에러메세지는 다음과 같다. org.junit.vintage.engine.descriptor.RunnerTestDescriptor warnAboutUnfilterableRunner WARNING: Runner org.junit.internal.runners.ErrorReportingRunner (used on class com.example.jpashop.service.MemberServiceTest) does not support filtering and will therefore be run completely. does not support를 보아하니 뭘 지원안해준다는 뜻인..
인프런 김영한 선생님의 강의를 듣다가 코드 정렬 단축키를 알게 되어 나에게 익숙해질 수 있도록 기록할겸 공유한다. 🤔 과연 어떤 단축키일까? 다음의 예시 코드를 보자. 필자가 예를 들기 위해 억지로 만들어 놓은 정렬 안된 코드이긴 하지만 이 코드를 정렬하려면 다음의 단축키를 이용하면 된다. 우선 정렬할 코드를 드래그하고 Ctrl+Shift+Alt+L(Windows 기준)을 누르면 된다. 그러면 다음과 같은 팝업이 뜨는데 Run을 누르면 코드가 자동 정렬되는 것을 알 수 있다. 코드 정렬 단축키의 경우 사용할 일이 많으므로 꼭 알아두도록 하자. 그럼 오늘도 열심히 개발하자. 🔥
일반적인 웹 애플리케이션 계층 구조에 대해 알아보자. 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체, ex.회원,주문,쿠폰 등 주로 데이터베이스에 저장하고 관리됨. 클래스 의존관계에 대해 알아보자. 🤔 MemoryMemberRepository를 사용하는 이유 => 개발 과정 중에 아직 DB가 정해지지 않았을때 memory 구조로 설계하고 나중에 DB 연결함.
인프런의 '김영한'선생님 강좌를 본 사람은 다 알겠지만 단축키를 사용하면 화면 하단에 단축키가 뜬다. 이 PlugIn을 설치해야지,, 하다가 결국 드디어 설치하게 되었다. 어떻게 설치하는지 같이 알아보자. 1. [File] -> [Settings]에서 Plugin을 검색하고 Plugin 탭 안에서 Key Promoter X를 검색한다. 설치가 완료되면 'Restart' 버튼을 눌러 IntelliJ를 재시작한다. 단축키 알림을 좀 더 보기 편하게 하기 위해 다음의 플러그인도 설치한다. IntelliJ를 재시작하고 나면 정상적으로 작동하는 것을 확인할 수 있다. 오늘은 미루고 미루던 단축키 plugin을 설치해보았다. 이제 뭔가 강사님(?) 느낌도 나니까 더욱더 열심히 개발해보자 🔥
게시판 만들기 프로젝트 과제가 있어서 프로젝트의 기본 뼈대(?) (spring boot 프로젝트 생성, dependencies 설정, mariadb 연결, controller 페이지 연결 등) 을 설정한 후 프로젝트를 실행시키는데 다음과 같은 에러가 발생했다. 아직 아무것도 안했는데 에러가 발생한다고? 물론 컴파일에러니까 당연히 발생할 수 있지만 어디서 잘못된 것일까,, 지금 바로 알아보도록 하자. 에러 메세지가 짧아 해결하기 어려울 것 같았는데 생각보다 해결방법은 단순하다. 우선 이 에러가 발생하는 이유는 https://start.spring.io/ 사이트로 접속하면 다음과 같이 스프링 프로젝트를 생성할 수 있는데 여기서 프로젝트를 생성하고 generate를 눌러 압축 해제 후 인텔리제이에서 프로젝트를..
캡스톤 개발 도중 다음과 같은 에러를 발견했다. 😣 에러메세지 어떤 에러이며 왜 발생하는지 알아보자. 🤔 이 에러는 영속성 때문에 발생하는 에러로, 필자의 테이블 관계에서 보면 다음과 같은 테이블 관계에서 consultig이 @manyToOne으로 member 객체를 참조하는데 member(fk) 값이 없어서 생기는 에러이다. 결국 join하는 쪽에 cascade 옵션을 걸어줘야 한다. 다음과 같이 cascade 옵션을 걸어주고 다시 실행해보면 잘 작동하는 것을 확인할 수 있다. 결과 확인 😆 오늘도 하나의 에러를 해결했다! 공부를 하면 할수록 '내가 아직 정말 부족하구나,,' 라는 생각이 든다. 더욱더 열심히 공부하자. 🔥
캡스톤 개발 중에 연관관계에서의 @ToString()과 exclude 속성에 대해 학습한 내용을 정리한다. @ToString은 언제 사용하며 exclude 속성은 무엇인지 같이 알아보도록 하자. 🤔 엔티티 간에 연관관계를 지정하는 경우에는 항상 @ToString()을 주의해야 한다. @ToString()은 해당 클래스의 모든 멤버 변수를 출력한다. 예를 들어 다음과 같은 경우에서 Consulting 객체의 @ToString()을 하면 memer 객체 역시 출력된다. 이때 Member를 출력하기 위해서는 Member 객체의 toString()이 호출되어야 하고 이때 데이터베이스 연결이 필요하다. 이런 문제로 인해 연관관계가 있는 엔티티 클래스의 경우 @ToString()을 할 때 exclude 속성을 사용..
캡스톤 프로젝트 도중 lazy 지연 로딩에 대해 학습하다 다음과 같은 에러를 발견했다. 어떤 에러였으며 어떻게 해결했는지 같이 확인해보자. data에 연관관계 설정 시 기존에는 다음과 같이 즉시로딩(Eager loading)으로 연관관계를 지정했다. 우선 즉시로딩의 장단점은 장점 : 한 번에 연관관계가 있는 모든 엔티티를 가져온다. 단점 : 여러 연관관계를 맺고 있거나 연관관계가 복잡할수록 조인으로 인한 성능 저하를 피할 수 없다. JPA에서 연관관계의 데이터를 어떻게 가져올 것인가를 fetch(패치)라고 하는데 연관관계의 어노테이션의 속성으로 'fetch'모드를 정할 수 있다. 지연로딩 설정은 다음과 같이 할 수 있다. 결국 lazy loading 설정을 마치고 findById를 통해 read 기능을 ..
- Total
- Today
- Yesterday
- 코드
- Java
- 해커랭크 챌린지
- 자바
- 정보처리산업기사 공부법
- stack
- 그리디
- 해커랭크
- LinkedList
- BAEKJOON
- JPA
- 디버깅
- 개발자
- 22 정보처리 산업기사
- 챌린지
- 백준
- 22 정보처리산업기사
- 소스코드
- hackerrank challenges
- 정보처리산업기사
- 해커랭크 자바 챌린지
- 자바의 정석
- ORM
- 해커랭크 자바
- hackerrank
- 정보처리 산업기사
- 풀이
- challenges
- queue
- 강의
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |