๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€199

[ํด๋ฆฐ์ฝ”๋“œ] ์ฑ… ๊ตฌ๋งค ์ธ์ฆ 2022. 2. 18.
[Spring Boot/RESTful] User Service API ๊ตฌํ˜„ 1) domain ํด๋ž˜์Šค ์ƒ์„ฑ ๋„๋ฉ”์ธ ํŠน์ • ์ „๋ฌธ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „๋ฌธ ์ง€์‹ ์Šคํ…Œ๋ ˆ์˜คํƒ€์ž… ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์–ด๋Š ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ๊ฒƒ์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ → ์˜์กด์„ฑ ์ฃผ์ž…ํ•  ๋•Œ ๋„์›€์ด ๋œ๋‹ค. ex) @RestController, @Service User domain ์—ฌ๊ธฐ์—์„œ๋Š” @Data annotation์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ @Data ์‚ฌ์šฉ์€ ๋˜๋„๋ก ์ž์ œํ•˜๊ณ  @Getter @Setter ๋“ฑ์„ ๋”ฐ๋กœ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (@Data ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ํ•œ๊บผ๋ฒˆ์— ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋„ ํ•˜๊ณ , @ToString์€ ์ž˜๋ชป ์“ฐ๋ฉด JPA์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ) @Data @AllArgsConstructor public class User { private Integer id; private String name; private Da.. 2022. 2. 17.
[Spring Boot/RESTful] Spring Boot๋กœ ๊ฐœ๋ฐœํ•˜๋Š” RESTful Service ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์ง€๊ธˆ๊นŒ์ง€๋Š” ํ•ญ์ƒ start.spring.io๋ฅผ ์ด์šฉํ•ด์™”๋Š”๋ฐ, IntelliJ ์•ˆ์—์„œ ๋ฐ”๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค! ์•„๋ž˜์ฒ˜๋Ÿผ dependency๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด pom.xml์— ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค. Spring web → embedded tomcat ์‹คํ–‰ ๊ฐ€๋Šฅ REST API ์„ค๊ณ„ HTTPS API Name GET /users retrieve all users POST /users create a user GET /users/{id} retrieve one user DELETE /users/{id} delete a user GET /users/{id}/posts retrieve all posts for a user POST /users/{id}/posts create a post for a u.. 2022. 2. 17.
[Spring Boot/RESTful] Web Service & Web Application ์›น ์„œ๋น„์Šค ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์ปดํ“จํ„ฐ๋“ค ๊ฐ„์— ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ SOAP VS REST 1) SOAP(Simple object access protocol) XML ๊ธฐ๋ฐ˜ envelope - header - body๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ -> overhead ์‹ฌํ•จ 2) REST(REpresentational State Transfer) Resource์˜ representation์— ์˜ํ•œ (์ž์›์˜) ์ƒํƒœ ์ „๋‹ฌ HTTP Method๋ฅผ ํ†ตํ•ด Resource๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์•„ํ‚คํ…์ณ RESTful : REST API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋น„์Šค REST HTTP HTTP Methods : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์ „๋‹ฌํ•˜๊ฒŒ ๋˜๋Š” ๋ชฉ์ ์ด๋‚˜ ์ข…๋ฅ˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์ˆ˜๋‹จ HTTP Status Codes : ํด๋ผ์ด.. 2022. 2. 17.
[Error] Spring Boot(2.5x)์—์„œ data.sql ์‹คํ–‰ ์˜ค๋ฅ˜(H2 database) ์ƒํ™ฉ Spring Boot(2.5 ์ด์ƒ)์—์„œ data.sql์„ ์‹คํ–‰ํ•˜์˜€์œผ๋‚˜ h2 db์— ํ•ด๋‹น ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ.(ํ…Œ์ด๋ธ”์€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋จ) ํ•ด๊ฒฐ application.yml์— ์•„๋ž˜ ๋‘ ์ค„ ์ถ”๊ฐ€ํ•˜๊ธฐ. ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์„ ๋ณด๋ฉด defer-datasource-initialization์„ true๋กœ๋งŒ ํ•ด๋„ ๋Œ์•„๊ฐ„๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ๋‚˜๊ฐ™์€ ๊ฒฝ์šฐ sql.init.mode=always๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๋„ฃ์–ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋‹ค! sql: init: mode: always jpa: defer-datasource-initialization: true 2022. 2. 2.
[Error] H2 ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ - IO Exception: null [90028-200] ์ƒํ™ฉ H2 Database Engine์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“œ๋ ค๊ณ  ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜. path, username, password๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋„ฃ์—ˆ๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฐœ์ƒ. ํ•ด๊ฒฐ ./{dbname}์„ ~/{dbname}์œผ๋กœ ๋ฐ”๊พธ์–ด์ฃผ์—ˆ๋”๋‹ˆ ๋ฐ”๋กœ ์ƒ์„ฑ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›๋ž˜๋ผ๋ฉด ~/{dbname}๊ณผ ./{dbname} ๋ชจ๋‘ ์ƒ์„ฑ์ด ์ž˜ ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค. ์ฐจ์ด ~/ : user ํด๋”์— ์ƒ์„ฑ ./ : h2 bin ํด๋”์— ์ƒ์„ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ •ํ•˜๋Š” ๋ฒ• ALTER USER {์œ ์ €๋ช…} SET PASSWORD '(๋ณ€๊ฒฝ๊ฐ’)'; 2022. 1. 30.
[Error] GenerationType.IDENTITY - ERROR: NULL not allowed for column "ID"; SQL statement: ์ƒํ™ฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ๊ณผ Insert ์ฟผ๋ฆฌ๋Š” ์ž˜ ์ž‘๋™ํ•˜๋‚˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณด๋ฉด ๊ฐ’์ด ์—†๋Š” ํ˜„์ƒ ํ•ด๊ฒฐ h2 ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค. 1.4.200 ๋ฒ„์ „์„ ๋‹ค์šด๋ฐ›์œผ๋ฉด ๋œ๋‹ค. ๊ธฐํƒ€ ์˜ค๋ฅ˜ +a) 1.4.200 installer๋ฅผ ๋‹ค์šด๋ฐ›์•˜๋Š”๋ฐ๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ -> ์—ฌ์ „ํžˆ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๋˜์–ด ์žˆ์„ ํ™•๋ฅ ์ด ๋†’๋‹ค 1) ํ˜„์žฌ ๋ฒ„์ „ ํ™•์ธ SELECT H2VERSION() FROM DUAL 2) C:\Users\{username}์—์„œ .h2.server.properties์™€ test.mv.db ์‚ญ์ œ 3) C:\Program Files (x86)\h2\bin์—์„œ zipํŒŒ์ผ ๋ฒ„์ „ ํ™•์ธ ํ›„ ํ•ด๋‹น ํด๋” ์‚ญ์ œ -> ํ™ˆํŽ˜์ด์ง€์—์„œ installer ์žฌ์„ค์น˜ => h2๋ฅผ ์‚ญ์ œํ•  ๋•Œ (3)๋ฒˆ ์œ„์น˜์— ์žˆ๋Š” ํŒŒ์ผ.. 2022. 1. 30.
[Chap 6] ๋ทฐ๋ฅผ ์ด์šฉํ•œ ํ™”๋ฉด ๊ตฌ์„ฑ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ํ™”๋ฉด์„ ์ถœ๋ ฅํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ : ์•กํ‹ฐ๋น„ํ‹ฐ ํ™”๋ฉด์— ๋‚ด์šฉ์„ ํ‘œ์‹œํ•˜๋Š” ํด๋ž˜์Šค : ๋ทฐ ํด๋ž˜์Šค(TextView, ImageView ๋“ฑ) -> ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ๋ทฐ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๊ธฐ์˜ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๊ตฌ์กฐ 1) ์•กํ‹ฐ๋น„ํ‹ฐ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ทฐ ํด๋ž˜์Šค๋ฅผ ์•กํ‹ฐ๋น„ํ‹ฐ ์ฝ”๋“œ์—์„œ ์ง์ ‘ ์ƒ์„ฑ -> XML ํŒŒ์ผ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž‘์„ฑ X 2) ๋ ˆ์ด์•„์›ƒ XML ํŒŒ์ผ๋กœ ์ž‘์„ฑ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ทฐ๋ฅผ XML์˜ ํƒœ๊ทธ๋กœ ๋ช…์‹œํ•ด ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• XML์—์„œ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ ์•กํ‹ฐ๋น„ํ‹ฐ ์ฝ”๋“œ์—์„œ๋Š” ํ™”๋ฉด์„ ์ถœ๋ ฅํ•˜๋Š” setContentView() ํ•จ์ˆ˜๋งŒ ํ˜ธ์ถœํ•˜๋ฉด์„œ XML ํŒŒ์ผ์„ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค. class MainActivity: AppCompatActivity() { overrid.. 2021. 11. 30.
[Chap 5] ์ฝ”ํ‹€๋ฆฐ์˜ ์œ ์šฉํ•œ ๊ธฐ๋ฒ• ๋žŒ๋‹ค ํ•จ์ˆ˜์™€ ๊ณ ์ฐจ ํ•จ์ˆ˜ ๋žŒ๋‹ค ํ•จ์ˆ˜(๋žŒ๋‹ค์‹) - ์ต๋ช… ํ•จ์ˆ˜(anonymous funciton) ์ •์˜ ๊ธฐ๋ฒ• - ์ฃผ๋กœ ํ•จ์ˆ˜๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์ฐจ ํ•จ์ˆ˜์— ๋งŽ์ด ์‚ฌ์šฉ * ๊ณ ์ฐจํ•จ์ˆ˜ : ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ๋žŒ๋‹ค ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ํ˜ธ์ถœ fun ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ•จ์ˆ˜ ์ด๋ฆ„์ด ์—†์Œ. -> ์ฃผ๋กœ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด ์‚ฌ์šฉ { ๋งค๊ฐœ๋ณ€์ˆ˜ -> ํ•จ์ˆ˜ ๋ณธ๋ฌธ } * ๋žŒ๋‹ค ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ทœ์น™ - ์ค‘๊ด„ํ˜ธ { } ๋กœ ํ‘œํ˜„ - { } ์•ˆ์— ํ™”์‚ดํ‘œ(->)๊ฐ€ ์žˆ์œผ๋ฉฐ ํ™”์‚ดํ‘œ ์™ผ์ชฝ์€ ๋งค๊ฐœ๋ณ€์ˆ˜, ์˜ค๋ฅธ์ชฝ์€ ํ•จ์ˆ˜ ๋ณธ๋ฌธ - ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์€ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์˜ ๋งˆ์ง€๋ง‰ ํ‘œํ˜„์‹ // ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋Œ€์ž… val sum = {no1: Int, no2: Int -> no1 + no2} sum(10, 20) // ๋žŒ๋‹ค .. 2021. 11. 23.