Language & Framework/Spring2023. 1. 21. 17:48[μŠ€ν”„λ§ MVC] μ„œλΈ”λ¦Ώ

μŠ€ν”„λ§ MVC 1편의 κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. HttpServletRequest μ•žμ„  ν¬μŠ€νŒ…μ—μ„œ μ„œλΈ”λ¦Ώμ€ κ°œλ°œμžκ°€ μš”μ²­ 및 응닡 정보λ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜λ©°, μ΄λŠ” WASκ°€ HTTP μš”μ²­ μ‹œ μš”μ²­ 및 응닡 객체λ₯Ό μƒˆλ‘œ λ§Œλ“  λ’€ μ„œλΈ”λ¦Ώ 객체λ₯Ό ν˜ΈμΆœν•˜λŠ” 과정을 κ±°μΉœλ‹€λŠ” 것을 μ„€λͺ…ν•˜μ˜€λ‹€. μ„œλΈ”λ¦Ώμ€ κ°œλ°œμžκ°€ HTTP μš”μ²­ λ©”μ‹œμ§€λ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ΄μš©ν•  수 μžˆλ„λ‘ 개발자 λŒ€μ‹  μš”μ²­ λ©”μ‹œμ§€λ₯Ό νŒŒμ‹± ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό HttpServletRequestλΌλŠ” 객체에 λ‹΄μ•„μ„œ μ œκ³΅ν•˜λŠ”λ°, ν•΄λ‹Ή 객체λ₯Ό μ΄μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 정보λ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ‘°νšŒν•  수 μžˆλ‹€. 1. Start Line: HTTP λ©”μ†Œλ“œ, URL, 쿼리 슀트링, ν”„λ‘œν† μ½œ 2. 헀더: 헀더 쑰회 3. λ°”λ””: form νŒŒλΌλ―Έν„° ν˜•μ‹ 쑰회, λ©”μ‹œμ§€ λ°”λ””..

Language & Framework/Spring2023. 1. 21. 16:18[μŠ€ν”„λ§ MVC] μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이해

μŠ€ν”„λ§ MVC 1편의 κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. μ›Ή μ„œλ²„, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ μ›Ή μ„œλ²„ (Web Server) HTTP 기반으둜 λ™μž‘ν•˜λ©°, 주둜 정적 λ¦¬μ†ŒμŠ€λ₯Ό μ œκ³΅ν•œλ‹€. Nginxλ‚˜ Apacheκ°€ μ›Ή μ„œλ²„μ— μ†ν•œλ‹€. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ (WAS - Web Application Server) HTTP 기반으둜 λ™μž‘ν•˜λ©°, μ›Ή μ„œλ²„μ˜ κΈ°λŠ₯을 포함함과 λ™μ‹œμ— 동적 HTML, HTTP API, JSP와 같은 ν”„λ‘œκ·Έλž¨ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. Tomcat이 λŒ€ν‘œμ μœΌλ‘œ WAS에 μ†ν•œλ‹€. μ›Ή μ„œλ²„μ™€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ μ›Ή μ„œλ²„λŠ” 정적 λ¦¬μ†ŒμŠ€λ₯Ό, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ„ 주둜 λ‹΄λ‹Ήν•œλ‹€κ³  ν•˜μ§€λ§Œ, μ›Ή μ„œλ²„λ„ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” κΈ°λŠ₯을 ν¬ν•¨ν•˜κΈ°λ„ ν•˜κ³  μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜..

Language & Framework/Spring2023. 1. 12. 20:58[μŠ€ν”„λ§ 핡심 원리] 빈 μŠ€μ½”ν”„

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. 빈 μŠ€μ½”ν”„λž€? 말 κ·ΈλŒ€λ‘œ 빈이 μ‘΄μž¬ν•  수 μžˆλŠ” λ²”μœ„λ₯Ό λœ»ν•œλ‹€. μ§€κΈˆκΉŒμ§€λŠ” μŠ€ν”„λ§ 빈이 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ˜ μ‹œμž‘κ³Ό ν•¨κ»˜ μƒμ„±λ˜μ–΄ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λœλ‹€κ³  ν•™μŠ΅ν•˜μ˜€λŠ”λ°, 이것은 μŠ€ν”„λ§ 빈이 기본적으둜 싱글톀 μŠ€μ½”ν”„λ‘œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ΄λ‹€. μŠ€ν”„λ§μ€ λ‹€μŒκ³Ό 같이 λ‹€μ–‘ν•œ μŠ€μ½”ν”„λ₯Ό μ§€μ›ν•œλ‹€. 1. 싱글톀: κΈ°λ³Έ μŠ€μ½”ν”„λ‘œ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ˜ μ‹œμž‘κ³Ό μ’…λ£ŒκΉŒμ§€ μœ μ§€λ˜λŠ” κ°€μž₯ 넓은 λ²”μœ„μ˜ μŠ€μ½”ν”„μ΄λ‹€. 2. ν”„λ‘œν† νƒ€μž…: μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” ν”„λ‘œν† νƒ€μž… 빈의 생성과 의쑴 관계 μ£Όμž…, μ΄ˆκΈ°ν™”κΉŒμ§€λ§Œ κ΄€μ—¬ν•˜κ³  κ·Έ 이상 κ΄€λ¦¬ν•˜μ§€ μ•ŠλŠ” 짧은 λ²”μœ„μ˜ μŠ€μ½”ν”„μ΄λ‹€. 3. μ›Ή κ΄€λ ¨ μŠ€μ½”ν”„ 3-1 request: μ›Ή μš”μ²­μ΄ λ“€μ–΄μ˜€κ³  λ‚˜κ°ˆ λ•ŒκΉŒμ§€ μœ μ§€λ˜λŠ” μŠ€μ½”ν”„μ΄λ‹€. 3-2 sess..

Language & Framework/Spring2023. 1. 10. 21:46[μŠ€ν”„λ§ 핡심 원리] 빈 생λͺ…μ£ΌκΈ° 콜백

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. μ˜μ‘΄κ΄€κ³„ μ£Όμž… μ‹œμ  μ†ŒμΌ“ ν†΅μ‹ μ²˜λŸΌ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ 지점에 ν•„μš”ν•œ 연결을 미리 해두고, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ’…λ£Œ μ‹œμ μ— 연결을 λͺ¨λ‘ μ’…λ£Œν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν•˜λ €λ©΄ 객체의 μ΄ˆκΈ°ν™”μ™€ μ’…λ£Œ μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€. μŠ€ν”„λ§μ€ μ΄λŸ¬ν•œ μ΄ˆκΈ°ν™”/μ’…λ£Œ μž‘μ—…μ„ μ–΄λ–»κ²Œ μ§„ν–‰ν• κΉŒ? μŠ€ν”„λ§ λΉˆμ€ 기본적으둜 '객체 생성 → 의쑴 관계 μ£Όμž…'의 라이프사이클을 가진닀. 빈이 객체λ₯Ό μƒμ„±ν•˜κ³  μ˜μ‘΄κ΄€κ³„ μ£Όμž…μ΄ λͺ¨λ‘ λλ‚œ 이후에 데이터λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” μ€€λΉ„κ°€ κ°–μΆ°μ§€λŠ” κ²ƒμ΄λ―€λ‘œ, 데이터 μ΄ˆκΈ°ν™” μž‘μ—…μ€ 의쑴 관계 μ£Όμž…μ΄ λͺ¨λ‘ μ™„λ£Œλ˜κ³  λ‚œ λ‹€μŒμ— ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. 싱글톀 λ°©μ‹μ—μ„œ μŠ€ν”„λ§ λΉˆμ€ λ‹€μŒκ³Ό 같은 이벀트 라이프사이클을 가진닀. (1) μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ 생성 → (2) μŠ€ν”„λ§ 빈 생성 → (3) 의쑴 ..

Language & Framework/Spring2022. 12. 21. 17:41[μŠ€ν”„λ§ 핡심 원리] μ˜μ‘΄κ΄€κ³„ μžλ™ μ£Όμž… (2)

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. 쑰회 빈이 2개 이상일 λ•Œ 문제점 @AutowiredλŠ” νƒ€μž…μœΌλ‘œ λΉˆμ„ μ‘°νšŒν•˜κΈ° λ•Œλ¬Έμ—, μ‹€μ œλ‘œλŠ” 더 λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€λ§Œ ac.getBean(DiscountPolicy.class)와 μœ μ‚¬ν•˜κ²Œ λ™μž‘ν•œλ‹€. μ΄λ•Œ DiscountPolicy의 ν•˜μœ„ νƒ€μž…μ΄ 두 개 이상 μ‘΄μž¬ν•  경우 @AutowiredλŠ” ν•œ κ°œκ°€ μ•„λ‹Œ μŠ€ν”„λ§ 빈으둜 λ“±λ‘λœ ν•˜μœ„ νƒ€μž… 클래슀의 개수만큼 μ€‘λ³΅λœ λΉˆμ„ 찾게 되고, NoUniqueBeanDefinitionException이 λ°œμƒν•˜κ²Œ λœλ‹€. κ·Έλ ‡λ‹€κ³  ν•΄μ„œ ν•˜μœ„ νƒ€μž…μœΌλ‘œ λΉˆμ„ μ‘°νšŒν•˜λŠ” 것은 μ•„λž˜μ™€ 같이 두 가지 문제점이 μ‘΄μž¬ν•œλ‹€. 1. DIPλ₯Ό μœ„λ°°ν•¨κ³Ό λ”λΆˆμ–΄ μ½”λ“œμ˜ μœ μ—°μ„±μ΄ 떨어진닀. 2. 빈 이름은 λ‹€λ₯΄μ§€λ§Œ νƒ€μž…μ΄ λ™μΌν•œ 경우 문제λ₯Ό..

Language & Framework/Spring2022. 12. 21. 17:31[μŠ€ν”„λ§ 핡심 원리] μ˜μ‘΄κ΄€κ³„ μžλ™ μ£Όμž… (1)

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. μ˜μ‘΄κ΄€κ³„ μ£Όμž… 방법 μƒμ„±μž μ£Όμž… μƒμ„±μžλ₯Ό 톡해 의쑴 관계λ₯Ό μ£Όμž…λ°›λŠ” λ°©λ²•μœΌλ‘œ, μƒμ„±μž 호좜 μ‹œμ μ— λ”± ν•œ 번만 호좜되며 λΆˆλ³€ ν˜Ήμ€ ν•„μˆ˜μ μΈ 의쑴 관계 μ£Όμž… μ‹œ μ‚¬μš©λœλ‹€. μƒμ„±μžκ°€ ν•œ 개만 μžˆμ„ 경우 μŠ€ν”„λ§ λΉˆμ— ν•œν•΄μ„œ @Autowiredλ₯Ό μƒλž΅ν•΄λ„ μžλ™μœΌλ‘œ 의쑴 관계가 μ£Όμž…λœλ‹€. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepositor..

Language & Framework/Spring2022. 12. 20. 01:29[μŠ€ν”„λ§ 핡심 원리] 싱글톀 μ»¨ν…Œμ΄λ„ˆ

μŠ€ν”„λ§ 핡심 μ›λ¦¬μ˜ κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. 싱글톀 νŒ¨ν„΄ 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ 1개만 μƒμ„±λ˜λŠ” 것을 보μž₯ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ΄λ‹€. μŠ€ν”„λ§μ΄ μ—†λŠ” μˆœμˆ˜ν•œ DI(Dependency Injection) μ»¨ν…Œμ΄λ„ˆλ₯Ό μ΄μš©ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž. DI μ»¨ν…Œμ΄λ„ˆμΈ AppConfigλŠ” μƒˆλ‘œμš΄ μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ°˜ν™˜ν•˜λŠ”λ°, νŠΈλž˜ν”½μ΄ μ¦κ°€ν• μˆ˜λ‘ μƒμ„±λ˜λŠ” 객체가 λ§Žμ•„μ§μ— 따라 λ©”λͺ¨λ¦¬ 낭비도 μ‹¬ν•΄μ§„λ‹€λŠ” 단점이 μ‘΄μž¬ν•œλ‹€. μ΄λŸ¬ν•œ ν•΄κ²°λ°©μ•ˆμœΌλ‘œμ¨ 같은 κ°μ²΄λŠ” λ”± 1개만 μƒμ„±λ˜λ„λ‘ ν•˜μ—¬ 객체λ₯Ό κ³΅μœ ν•˜κ²Œλ” μ„€κ³„ν•˜λŠ” 방법을 μ΄μš©ν•  수 μžˆλŠ”λ°, ν•΄λ‹Ή 방법이 싱글톀 νŒ¨ν„΄μ„ μ΄μš©ν•˜λŠ” 것이닀. public class SingletonService { private static final SingletonService ..

Etc2022. 12. 19. 21:09[Git] Another git process seems to be running in this repository μ—λŸ¬

μˆ˜μ •ν•œ νŒŒμΌμ„ add ν•˜λ €κ³  ν•˜λ‹ˆ μ•„λž˜μ™€ 같은 였λ₯˜κ°€ λ°œμƒν•˜μ˜€λ‹€. fatal: Unable to create 'ν”„λ‘œμ νŠΈ 경둜/.git/index.lock': File exists. Another git process seems to be running in this repository, e.g.an editor opened by 'git commit'. Please make sure all processes are terminated then try again. If it still fails, a git process remove the file manually to continue. 컀밋을 ν•˜λŠ” κ³Όμ •μ—μ„œ μ—΄μ–΄λ‘” 에디터가 λ”°λ‘œ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— νŒŒμΌμ„ μ‚­μ œν•˜λŠ” 방법을 μ„ νƒν•˜μ˜€λ‹€. ν”„λ‘œμ νŠΈκ°€ μžˆλŠ” 경둜 상에..

image