SpringBoot
Spring Data JPA / Spring Batch
Redis / PostgreSQL / MySQL
κ°μ ν΄μΌ ν λΆλΆλ§ μ 리νμμ΅λλ€π
μΆκ°μ μΌλ‘ λ€λ₯Έ μ‘°μ SAλ₯Ό λ³΄κ³ νΌλλ°±μ λ°μλ κ²λ€ μ€ μ°Έκ³ ν λ§ν μ¬νλ€μ μ 리νμ΅λλ€.
κ·Έλ¬λ Register Schedule 리νμ€νΈλ₯Ό 보λ΄μ 400 μλ΅
detailμ Failed to read requestλΌ λμ΄ μμ΄μ request νμμ λ¬Έμ λΌ μκ°ν΄
RequestDtoκ° λ μ§λ₯Ό λ°λ νμμ λ°κΏλ΄€μΌλ κ²°κ³Όλ κ°μ΅λλ€.
λ‘κ·Έλ₯Ό 보면 AccessTokenμ λ‘κ·ΈμΈλ λ°μλλ‘ λ€μ μ λ¬μ΄ λκ±° κ°μ΅λλ€. μ 문ꡬ μ νλ‘ select * from user μΏΌλ¦¬κ° λκ°λλ€
λ§μ§λ§ λ‘κ·Έ λ©μΈμ§λ WebSocket κ΄λ ¨μ
λλ€.
App ꡬλμ λ©μΆκ³ gradle clean ν λ€μ gradle compileJava (μμ€μ½λ μ»΄νμΌ) νμ λ λ‘κ·Έμ
λλ€.
μ»΄νμΌμ μ λλλ° WebSocketSecurityConfigμμ deprecated APIλ₯Ό μ°κ³ μλ€λ λ©μΈμ§κ° λΉλλ€.
νΉμ μΉμμΌ μͺ½μ μμ μ¬νμ΄ develop branchμ λ°μ μλ κ²μ΄ μλκ±ΈκΉμ?
μΉμμΌμ΄ Schedule entityμͺ½μ΄λ μ ν κ΄λ ¨μ΄ μμκ² κ°μλ° λ‘κ·Έ λ©μΈμ§μ μΉμμΌμ΄ μκΎΈ μΈκΈλ©λλ€.
(develop branchμμ merge λ°μν λ°λ‘ feat/schedule λΈλμΉμμ μμ
νμ΅λλ€.)
μ λ¬Έμ λ‘ EntityManagerFactory κ° ν΄λΉ Qν΄λμ€μ κ·Όμμ΄ λλ Entityμ Pathλ₯Ό μ°Ύμ§ λͺ»νκ³ μμ΅λλ€.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: com/sparta/sbug/chatroom/entity/ChatRoom
μλ¬ λ©μμ§ μ λλ€.
Error creating bean with name 'entityManagerFactory' ...
com/sparta/sbug/chatroom/entity/ChatRoom
κ°λ΅ν λ²μ μ λλ€. ν΄κ²°μ± μ°Ύκ³ μμ΅λλ€.
μλ΅κ°(String)μ μ μ΅λλ€.
ν€λμ Keyκ° (Authorization)λ μ μ€μ§λ§, valueκ° nullλ‘ μ€κ³ μλ μν©μ λλ€.
μ΄κΈ° μ€κ³μ μ΄λ κ² λ€ λ°μ΄ν°κ° μ°κ΄ κ΄κ³λ₯Ό λ§Ίλλ‘ νμμΌλ
λ μ μ κ° μ£Όκ³ λ°μ λ©μΈμ§λ€μ μ‘°ννκ±°λ, λ μ μ μ μ±ν
λ°©μ μ°Ύλ 쿼리λ₯Ό μμ±νκ³ λ³΄λ
Depthκ° 2 μ΄μμΈ Joinκ³Ό Sub Queryλ₯Ό λμμ μ¬μ©ν΄μΌ ν΄μ κ΅μ₯ν 볡μ‘νκ³ λΉν¨μ¨μ μΈ μΏΌλ¦¬κ° μνλμμ΅λλ€.
κ·Έλμ ꡬ쑰μ μΌλ‘ λ€μκ³Ό κ°μ΄ μμ νμ¬ λ κ°λ¨νκ³ ν¨μ¨μ μΈ μΏΌλ¦¬λ₯Ό μμ±ν μ μμμ΅λλ€.
ChatRoomκ³Ό UserChatRoomμ νμκ° μμ΄μ Έ μμ νμκ³
Chat μν°ν°λ receiverμ sender λ κ°μ§ μ μ λ₯Ό μμ±μΌλ‘ κ°κ² λμμ΅λλ€.
private ChatResponseDto(Chat chat) {
this.id = chat.getId();
this.sender = chat.getSender().getNickname();
this.message = chat.getMessage();
this.receiver = chat.getReceiver().getNickname();
this.status = chat.getStatus().toString();
}
public static ChatResponseDto of(Chat chat){
return new ChatResponseDto(chat);
}
μμ κ°μ ννλ‘ μμ±μλ private νκ² λ§μλκ³ , publicν μ€νν± λ§€μλλ₯Ό μ€νν©λλ€.
401 μλ¬κ° λμ€λ μν©μ΄κ³ , λΈλ μ΄ν¬ ν¬μΈνΈ μ¬λ¬κ΅°λ° μ°μ΄λ΄λ ν΄κ²°μ΄ μ λκ³ μλ μν©μ΄λΌμ μμμΌ νν°λ μ€μλ©΄ ν΄κ²°ν΄λκ² μ΅λλ€. νμ¬ λλ²¨λ‘ λΈλμΉμμλ WebSecurityConfig λΆλΆ μ£Όμμ²λ¦¬κ° λμ΄μμ΄μ μ μμ μΌλ‘ ν μ€νΈ κ°λ₯νμ€ κ² κ°μ΅λλ€. μλλ λΆλΆμ μ΄μλ‘ λ¨κ²¨μ£Όμλ©΄ νμΈνλλλ‘ ν΄κ²°νκ² μ΅λλ€!
νκ²½ λ³μλ λ€μκ³Ό κ°μ΄ μ€μ ν©λλ€.
λ‘κ·ΈμΈνλ HTTP Requestμ Testμ μλμ κ°μ΄ μ
λ ₯ν΄μ£ΌμΈμ
const responseJson = pm.response.json();
pm.environment.set('atk', responseJson.atk);
pm.environment.set('rtk', responseJson.rtk);
κ°μ΄ νμν Requestμ Headerμ λ€μκ³Ό κ°μ΄ μ
λ ₯ν΄μ£Όμλ©΄ λ©λλ€.
Authorization {{atk}}
RTK {{rtk}}
ctrl
+ alt
+ L
Option
+ Cmd
+ L
μ€ λ°κΏμ μ¬λ¬ OS νκ²½μ κ³ λ €νμ¬ λ€μκ³Ό κ°μ΄ μμ±ν©λλ€.
System.lineSeparator();
ν(tab)μ IntelliJμ κΈ°λ³Έ κ°μ μ¬μ©νκ±°λ λμ΄μ°κΈ° 4μΉΈμ μ¬μ©ν©λλ€.
μ€κ΄νΈ{}
λ λ³Έλ¬Έμ΄ λΉμ΄ μκ±°λ λ¨μΌ λ¬Έλ§ ν¬ν¨νλ κ²½μ°μλ λ°λμ μ¬μ©λ©λλ€.
if (count == 0) {
system.out.println("is Zero")
}
λν μ€κ΄νΈ λΈλ‘μ Kernighan λ° Ritchie μ€νμΌ(μ΄μ§νΈ λκ΄νΈ)μ λ°λ¦ λλ€.
μ¬λ μ€κ΄νΈ μμλ μ€ λ°κΏμ΄ μμ΅λλ€.
μ¬λ μ€κ΄νΈ λ€μ μ€ λ°κΏ
λ«λ μ€κ΄νΈ μμ μ€ λ°κΏ
λ«λ μ€κ΄νΈ λ€μ μ€ λ°κΏμ ν΄λΉ μ€κ΄νΈκ° λͺ λ Ήλ¬Έμ μ’ λ£νκ±°λ λ©μλ, μμ±μ λλ λͺ λͺ λ ν΄λμ€μ λ³Έλ¬Έμ μ’ λ£νλ κ²½μ°μλ§ ν΄λΉλ©λλ€.
μ) if β¦ else
λΉ λΈλ‘μ κ°κ²°ν μ μμ΅λλ€.
void doNothing() { }
ν΄λμ€ λ΄μ©κ³Ό μμλ λ Όλ¦¬μ μμλ₯Ό μ¬μ©ν©λλ€. μμμ λν μ€λͺ μ μμ² μ μμ±μκ° μ€λͺ ν μ μμ΄μΌ ν©λλ€.
μ) μλ‘μ΄ λ©μλλ ν΄λμ€μ λμ μ΅κ΄μ μΌλ‘ μΆκ°λλ κ²μ΄ μλλΌ, μμ±λ μμλ‘ λμ΄νκΈ° λλ¬Έμ
λλ€.
ν¨ν€μ§ μ΄λ¦μ μλ¬Έμμ μ«μλ§ μ¬μ©ν©λλ€, μ°μλ λ¨μ΄λ λ¨μν ν¨κ» μ°κ²°λ©λλ€.
μ) com.example.deepspace β Yes
μ) com.example.deepSpace, com.example.deep_space β No
ν΄λμ€ μ΄λ¦μ UpperCamelCaseλ‘ μμ±ν©λλ€. μΌλ°μ μΌλ‘ λͺ μ¬ λλ λͺ μ¬κ΅¬λ‘ μμ±νμ§λ§ κ²½μ°μ λ°λΌ νμ©μ¬ λλ νμ©μ¬κ΅¬λ‘ μμ±ν΄λ νμ©ν©λλ€.
μ) MemoProject
λ©μλ μ΄λ¦μ λμ¬, lowerCamelCaseλ‘ μμ±ν©λλ€. μΌλ°μ μΌλ‘ λμ¬ λλ λμ¬κ΅¬λ‘ μμ±ν©λλ€.
μ) doSomething
μμκ° μλ νλ μ΄λ¦μ lowerCamelCaseλ‘ μμ±ν©λλ€.
μμλ UPPER_SNAKE_CASEλ‘ μμ±ν©λλ€.
μ) IMMUTABLE_NUMBER
κ·Έ μΈ λ§€κ°λ³μ, μ§μ λ³μλ lowerCamelCaseλ‘ μμ±ν©λλ€.
@Override
λ κΌ μ¬μ©ν©λλ€.
long μ μ 리ν°λ΄μ μ λ―Έμ¬λ‘ λ°λμ λλ¬Έμλ₯Ό μ¬μ©ν©λλ€. (μ«μ 1κ³Όμ νΌλμ νΌνκΈ° μν΄)
μ) 111111111l β No
registerSchedule (μΌμ λ±λ‘)
updateSchedule (μΌμ λ³κ²½)
completeSchedule (μΌμ μλ£ νμ)
incompleteSchedule (μΌμ λ―Έμ νμ)
deleteSchedule (μΌμ μμ )
getMySchedules
getPeriodSchedules
-- μ μμλμ΄λΌλ건 νλ²ν caseμ λν΄ μ½λκ° μλνλλλ‘
μλνλ€λ λ»μ
λλ€.
-- κ²½κ³κ°μ΄λ Nullκ°μ λν Testλ μ λΆ νμν μν©μ
λλ€.
-- λͺκ°μ§ μμΈμ²λ¦¬κ° λ νμν μν©μ
λλ€.
1. νμκ°μ
2. λ‘κ·ΈμΈ
3. νμ νν΄
4. λ΄ μ 보 μμ
5. λͺ¨λ μ¬μ©μ μ‘°ν
6. λ΄ μ 보 보기
7. μ μ κ° κ°μ
λ μ±λ μ‘°ν
** 1. μ°λ λ μμ± μ **
** 2. μ°λ λ μμ
** 3. μ°λ λ μμ
@Override
public String unregister(User user) {
userRepository.deleteByEmail(user.getEmail());
return "home";
}
μμ²λΌ ν¨λ¬λ―Έν°λ‘ Userλ₯Ό λ°μμλ λλκ°? μ λν΄μ κ³ λ―Όνμ΅λλ€.
Controller - Service κ³μΈ΅κ° λ°μ΄ν° μ£Όκ³ λ°μ μ μν°ν°λ₯Ό μ£Όκ³ λ°μλ λλκ°?
** 1. λκΈ μμ± **
** 2. λκΈ μμ **
** 3. λκΈ μμ **
1. User νμ κ°μ
2. User λ‘κ·ΈμΈ
3. νμ νν΄
4. νμ μ 보 μμ
5. μ 체 μ¬μ©μ μ 보 μ‘°ν
6. λ΄ μ 보 μ‘°ν
1. μ±λ μμ±
2. μ±λ μ΄λνκΈ°
3. μ±λλͺ μμ
4. μ±λ μμ
5. μ±λ λ΄ κ²μκΈ μ 체 μ‘°ν
1. κ²μκΈ μμ±
2. κ²μκΈ μμ
3. κ²μκΈ μμ
4. κ²μκΈ μλ λκΈ μ 체 μ‘°ν(νμ΄μ§)
-> λ¨μΌ κ²μκΈμ μ‘°ννμ λ κ·Έ κ²μκΈ μ 보μ ν¨κ» λκΈ μ 보λ ν¨κ» λΆλ¬μμ§λ κ² μμ°μ€λ¬μ보μ
1. λκΈ μμ±
2. λκΈ μμ
3. λκΈ μμ
1. κ²μκΈμ μ΄λͺ¨μ§λ₯Ό λ¨κΈ°κΈ°
2. κ²μκΈμ μ΄λͺ¨μ§λ₯Ό μμ νκΈ°
3. λκΈμ μ΄λͺ¨μ§λ₯Ό λ¨κΈ°κΈ°
4. λκΈμ μ΄λͺ¨μ§λ₯Ό μμ νκΈ°
401 μλ¬ μ€ν μ΄ν°μ€λ νμΈλμ§λ§ μλ¬ λ©μμ§λ μλ μν©μ λλ€. μ€λ μ¬κΈ°κΉμ§ ν΄μ λ§μΉκ³ λ΄μΌ μ΄ν΄λ³Όκ²μ!
1. μ±λ μμ±
** 2. μ μ μ±λμ μ΄λνκΈ° **
3. μ±λλͺ μμ
4. μ±λλͺ μμ
5. νΉμ μ±λ μ‘°ν
μλ μ±λμ μ‘°ννλ €κ³ ν λ μλ¬
π€μ±λ μ‘°ννλ λ‘μ§μ μ±λ μ΄λ¦λ§ νμλλ©΄ λ μ§
μ±λ μλΉμ€μ λμ μ±λμ κ°μ
λμ΄ μλ μ¬μ©μμΈμ§ κ²μ¬νλ λ©μλκ° μΆκ°λμ΅λλ€.
(μ΄μ Threadμ Commentμ μ΄λͺ¨μ§ λ°μμ λ¨κΈΈ λλ κΆνμ 체ν¬ν©λλ€)
λμ μ±λμ μ 체 μ°λ λλ₯Ό μ½μ΄μ¬ λ μ°λ λμ λ¨κ²¨μ§ μ΄λͺ¨μ§ λ°μ μ 보λ μ½μ΄μ΅λλ€.
λμ μ±λμ μ 체 μ°λ λλ₯Ό μ½μ΄μ¬ λ μ±λμ κ°μ λλμ§ κ²μ¬ν©λλ€
λμ μ±λμ νΉμ μ°λ λλ₯Ό μ½μ΄μ¬ λλ λ§μ°¬κ°μ§λ‘ μ μ κ° μ±λμ κ°μ λλμ§ κ²μ¬ν©λλ€
Threadμ μ΄λͺ¨μ§ λ°μμ λ¨κΈ°λ apiμ μμ νλ apiκ° ν΅ν©λμμ΅λλ€.
Commentμ μ΄λͺ¨μ§ λ°μμ λ¨κΈ°λ apiμ μμ νλ apiκ° ν΅ν©λμμ΅λλ€.
μ΄λͺ¨μ§ μ΄κ±°ν μ΄λ¦μ΄ λ°λμμ΅λλ€ (SMILE, CRY, HEART, LIKE)
μΌμ μ λ΄μ©κ³Ό μμ μΌμ λ³κ²½νλ νλμ λ©μλλ₯Ό λ΄μ©μ λ³κ²½νλ λ©μλμ μμ μ λ³κ²½νλ λ©μλ λκ°λ‘ λΆλ¦¬νμμ΅λλ€. (컨νΈλ‘€λ¬λ λΆλ¦¬λμμ΅λλ€.)
λ, μ΄λ² λ¬ μΌμ μ μ‘°ννλ κΈ°λ₯κ³Ό μλ£ μ²΄ν¬λ₯Ό νλ κΈ°λ₯μ μΆκ°νμμ΅λλ€.
λ³κ²½ μ€μ _λ ν¬μ§ν 리λ₯Ό ν΅ν΄ IDλ‘ Schedule
κ°μ²΄λ₯Ό μ‘°ννμ¬ κ°μ Έμ€λ λΆλΆ_μ μ½λκ° μ€λ³΅λμ΄ μ 리νμμ΅λλ€.
μλμ κ°μ DTOλ₯Ό λ§λ€μ΄ λ°ννλ μ½λλ ν¨μμ λ°ν κ°μ λ³μμ λ°μ ν λ°νν νμ μμ΄ λ°λ‘ ν¨μμ λ°ν κ°μ λ°νν μ μμ κ² κ°μ΅λλ€.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.