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

Tech Stack17

[CSS] border-radius: ๊ผญ์ง“์  ๋ณ€๊ฒฝ border-radius ์†์„ฑ์€ ์š”์†Œ ํ…Œ๋‘๋ฆฌ ๊ฒฝ๊ณ„์˜ ๊ผญ์ง“์ ์„ ๋‘ฅ๊ธ€๊ฒŒ ๋งŒ๋“ ๋‹ค. .thumb{ padding:8px; background:#f8fafc; border-radius: 10px 100px / 120px; box-shadow: 0 10px 28px rgba(99,102,241,.14), inset 0 0 0 1px rgba(15,23,42,.05); } .thumb img{ border-radius: 10px 100px / 120px; } ์ฐธ๊ณ : https://developer.mozilla.org/ko/docs/Web/CSS/Reference/Properties/border-radius 2026. 1. 12.
[DB] [๋™์‹œ์„ฑ์ œ์–ด] ๋‚™๊ด€์  ๋ฝ๊ณผ ๋น„๊ด€์  ๋ฝ ๊ฒŒ์‹œ๊ธ€(Post), ๋Œ“๊ธ€(Comment) ์ข‹์•„์š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์— ์•ž์„œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ข‹์•„์š”๋ฅผ ๋™์‹œ์— ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.์ถฉ๋Œ์ด ๋ฐœ์ƒ ์•ˆํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ ๋ฐฉ๋ฒ•์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฝ(Lock)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Redis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฝ(Lock)์ด ๋ฌด์—‡์ธ์ง€ ๋จผ์ € ์•Œ์•„ ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ˜‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์‹œ์— ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ ค๋Š” ๋‹ค์–‘ํ•œ ์š”์ฒญ๋“ค์„ ์ž˜ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์€ ํ•„์ˆ˜์ ์ธ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ์ ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋น„๊ด€์  ๋ฝ(pessimistic lock)๋น„๊ด€์  ๋ฝ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๋ฏธ๋ฆฌ.. 2025. 9. 16.
[JPA] [MySQL] ON DELETE CASCADE์™€ ์†Œํ”„ํŠธ ์‚ญ์ œ(Soft Delete) 1. ๋ฌธ์ œ ์ƒํ™ฉ๊ฒŒ์‹œ๊ธ€(Post)์„ ์‚ญ์ œํ•  ๋•Œ, ๊ทธ ์•ˆ์— ์žˆ๋Š” ๋Œ“๊ธ€(Comment)๋„ ํ•จ๊ป˜ ์‚ญ์ œ ๋˜๋„๋ก ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.๊ฒ€์ƒ‰์„ ํ•˜๋‹ค๊ฐ€ @OnDelete ์–ด๋…ธํ…Œ์ด์…˜์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€๋ชจ(Post)๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์ž์‹(Comment)๋„ ๊ฐ™์ด ์‚ญ์ œ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์šฉํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ๊ทธ๋Œ€๋กœ ์˜€๋‹ค.constraint FKh4c7lvsc298whoyd4w9ta25cr foreign key (post_id) references posts (id) ์ด ์™ธ๋ž˜ํ‚ค์—๋Š” ON DELETE CASCADE ์˜ต์…˜์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ€๋ชจ(Post)๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ž์‹(Comment)์ด ๋‚จ์•„์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.Cannot delete or update a parent row: a fo.. 2025. 9. 10.
[Java] optional์˜ orElse์™€ orElseGet ์ฐจ์ด - orElse๋Š” Null์ด๋˜ ๋ง๋˜ ํ•ญ์ƒ ์‚ฌ์šฉ- orElseGet์€ null์ผ ๋•Œ๋งŒ ์‚ฌ์šฉ public interface MemberRepository extends JpaRepository { Optional findByKakaoId(String kakaoId);} 2025. 9. 4.
[Spring] [์นด์นด์˜ค ๋กœ๊ทธ์ธ] RestTemplate vs WebClient Spring์—์„œ ์™ธ๋ถ€ API์™€ ํ†ต์‹ ํ•  ๋•Œ๋Š” RestTemplate ๋˜๋Š” WebClient๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ๋Š” RestTemplate์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ๊ธฐ์กด์— WebClient๋ฅผ ์‚ฌ์šฉํ•ด ์™”๊ณ  ์ฐจ์ด๊ฐ€ ๊ถ๊ธˆํ•ด ์ •๋ฆฌํ•ด ๋ดค๋‹ค. RestTemplate vs WebClient ์ฐจ์ด๊ตฌ๋ถ„RestTemplateWebClient๋ฐฉ์‹๋™๊ธฐ(๋ธ”๋กœํ‚น)– ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ๊ฐ€ ์‘๋‹ต๊นŒ์ง€ ๋Œ€๊ธฐ๋น„๋™๊ธฐ/๋…ผ๋ธ”๋กœํ‚น– ๋ณด๋‚ด๋‘๊ณ  ์‘๋‹ต ์˜ค๋ฉด ์ฒ˜๋ฆฌ(Mono/Flux)์ „์†ก/ํŒŒ์‹ฑHttpMessageConverter ๋“ฑ๋ก์š”์ฒญ ์‹œ์ ์— contentType/ํ—ค๋” ๋ช…์‹œ, BodyInserters ๋“ฑ์œผ๋กœ ๋ช…ํ™•ํ™•์žฅ์„ฑํƒ€์ž„์•„์›ƒ/์—ฐ๊ฒฐ ํ’€ ์ˆ˜๋™ ์„ค์ •Reactor Netty๋กœ ๋„คํŠธ์›Œํฌ ์˜ต์…˜ ์ œ์–ด ์‰ฌ์›€ ์นด์นด์˜ค OAuth์— ์ ์šฉํ•  ๋•Œ ํ™•์ธํ•  ์‚ฌํ•ญ-.. 2025. 9. 3.
[Spring] ์ค‘์ฒฉ ํด๋ž˜์Šค์™€ DTO ์„ค๊ณ„ KakaoDTO.OAuthToken oAuthToken = kakaoUtil.requestToken(accessCode); KakaoDTO.OAuthToken- KakaoDTO ํด๋ž˜์Šค ์•ˆ์— ์žˆ๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค(Static Inner Class) ๋˜๋Š” ์ค‘์ฒฉ ํด๋ž˜์Šค OAuthToken์„ ์˜๋ฏธํ•œ๋‹ค.- KakaoDTO ๋ผ๋Š” DTO ๋ฌถ์Œ ์•ˆ์—์„œ "์นด์นด์˜ค์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ํ† ํฐ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๊ฐ์ฒด" ๋ฅผ ๋งํ•œ๋‹ค. // ์ฝ”๋“œ ์˜ˆ์‹œpublic class KakaoDTO { @Getter public static class OAuthToken{ @JsonProperty("token_type") private String tokenType; @JsonProperty("access_to.. 2025. 9. 3.