Animated Rainbow Nyan Cat
no image
JPA, ResponseEntity, HATEOAS
ResponseEntity> entity = new ResponseEntity(friR.findAll(), HttpStatus.OK);์ด ์ฝ”๋“œ์™€return ResponseEntity .status(HttpStatus.OK) .body(friR.findAll());//์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด๋„ ๋จ.์ด ์ฝ”๋“œ๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.Optional friend = friR.findById(friendNo);if (!friend.isEmpty()){ ResponseEntity entity = new ResponseEntity(friend.get(), HttpStatus.OK); return entity;}else{ HttpHeaders header = new HttpHeaders();..
2023.11.02
no image
REST API, URI
@Query("select m from Member m join m.team t where t.name = :tn")public List aaa1(@Param("tn") String tname);@Query("select m from Member m where m.team.name = :tn")public List aaa2(@Param("tn") String tname);public List findByTeamName(String name);์œ„์˜ ์„ธ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. findByTeamName ํ•˜๋ฉด team๊ฐ์ฒด์˜ name์„ ๊ฐ€์ ธ์˜จ๋‹ค. ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ์ฐพ์•„์˜ฌ์ˆ˜ ์žˆ์Œ.@Query("select t.name from Member m join m.team t where m.u..
2023.11.01
no image
JPA Repository, ์ฟผ๋ฆฌ๋ฉ”์„œ๋“œ
public interface ItemRepository extends JpaRepository { }์ด๋ ‡๊ฒŒ JpaRepository๋ฅผ extendsํ•˜๋ฉด ํŽธ๋ฆฌํ•ด์ง. ์ฒ˜๋ฆฌํ•  ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ˆ„๊ตฌ๋ƒ๋ฅผ ์ฒซ๋ฒˆ์งธ๊ฐ€ ์•Œ๋ ค์ฃผ๊ณ , ๋‘๋ฒˆ์งธ๋Š” primary key์— ํ•ด๋‹น๋˜๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.๊ทธ์ € ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์žฅ์ฐฉํ•˜๊ณ  ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ , Spring์ด ์•Œ์•„์„œ ํ•ด์ค€๋‹ค. JpaRepository ์ฃผ์š” ๋ฉ”์„œ๋“œ S save(S) : ์ƒˆ๋กœ์šด ์—”ํ‹ฐํ‹ฐ๋Š” ์ €์žฅํ•˜๊ณ ,  ์ด๋ฏธ ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ๋Š” ๋ณ‘ํ•ฉdelete(T) : ์—”ํ‹ฐํ‹ฐ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œOptional findById(ID) : ID๋กœ ์—”ํ‹ฐํ‹ฐ ํ•˜๋‚˜๋ฅผ ์กฐํšŒList findAll : ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ. ์ •๋ ฌ์ด๋‚˜ ํŽ˜์ด์ง• ์กฐ๊ฑด์„ ํŒŒ๋ผ๋ฏธํ„ฐ..
2023.10.31
no image
JPA, JQPL
find(Class ์ด๋ฆ„, Object ์ด๋ฆ„)Object์—๋Š” ์–ด๋–ค ํƒ€์ž…์ด ๋๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ JQPL ๊ธฐ๋ณธ๋ฌธ๋ฒ•ํŽ˜์ด์ง• APIsetFirstResult (int startPosition) : ์กฐํšŒ ์‹œ์ž‘ ์œ„์น˜. 0๋ถ€ํ„ฐ ์‹œ์ž‘.setMaxResult (int maxResult) : ์กฐํšŒํ•  ๋ฐ์ดํ„ฐ ์ˆ˜. .List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(1) .setMaxResults(10) .getResultList();์‹œ์ž‘ ์ธ๋ฑ์Šค 1๋ถ€ํ„ฐ ์ด 10๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ JPA ๊ธฐ๋ณธํ‚ค ๋งคํ•‘๊ธฐ๋ณธํ‚ค ๋งคํ•‘ ๋ฐฉ๋ฒ• 2๊ฐ€์ง€ : ์ง์ ‘ํ• ๋‹น, ์ž๋™์ƒ์„ฑ์ง์ ‘ํ• ๋‹น : ์—”ํ‹ฐํ‹ฐ์— @Id ์–ด๋…ธ..
2023.10.30
no image
JPA
JPAJava Persistence API์˜ ์•ฝ์ž. RDBMS์™€ OOP ๊ฐ์ฒด ์‚ฌ์ด์˜ ๋ถˆ์ผ์น˜์—์„œ ์˜ค๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ORM(Object-Relational Mapping) ๊ธฐ์ˆ ์ด๋‹ค. ORMObject Relational Mapping. ๊ฐ์ฒด - ๊ด€๊ณ„ ๋งคํ•‘. OOP์˜ ๊ฐ์ฒด ๊ตฌํ˜„ ํด๋ž˜์Šค์™€ RDBMS์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ.ORM์„ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL๋ฌธ์„ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ. ์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด SQL๋ฌธ์„ ๊ตฌํ˜„ํ•  ํ•„์š” ์—†์ด ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐ์ž‘ ๊ฐ€๋Šฅ.JPA๋Š” ๊ตฌํ˜„์ฒด๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ORM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•จ. ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ๊ฐ€์žฅ ๋Œ€์ค‘์ ์ธ ๊ฒƒ์€ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ. Entity Manager : ์—”ํ‹ฐํ‹ฐ ๊ด€๋ฆฌ..
2023.10.26
no image
AOP, PSA
์ธํ„ฐ์…‰ํ„ฐ (Interceptor)ํ•„ํ„ฐ์™€๋Š” ๋‹ฌ๋ฆฌ Spring์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ . diapatcher์™€ servlet์˜ ์ค‘๊ฐ„.DispatcherServlet์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „๊ณผ ํ›„์— ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต์›น์ปจํ…Œ์ด๋„ˆ(์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ)์—์„œ ๋™์ž‘ํ•˜๋Š” ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๋™์ž‘์„ ํ•œ๋‹ค. ์ธํ„ฐ์…‰ํ„ฐ์˜ ๋ฉ”์„œ๋“œ 3๊ฐ€์ง€- preHandler : ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์‹คํ–‰, ๋ฆฌํ„ด ๊ฐ’์ด boolean ๊ฐ’. ๋ฆฌํ„ด๊ฐ’์ด true๋ฉด ๋‹ค์Œ๋‹จ๊ณ„๋กœ ์ง„ํ–‰, false๋ผ๋ฉด ์ž‘์—…์„ ์ค‘๋‹จํ•˜์—ฌ ์ดํ›„์˜ ์ž‘์—…์€ ์ง„ํ–‰ ์•ˆ๋จ. (ex.ํšŒ์›์€ ๋งž๋‚˜ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ํšŒ์›์ผ๋•Œ)default boolean preHandle(HttpServletRequest request, HttpServletResponse..
2023.10.26
no image
Spring Boot, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, ์›น์†Œ์ผ“
Spring Scheduling(Task)์Šคํ”„๋ง์—์„œ๋Š” ํŠน์ •์‹œ๊ฐ„์— ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ Task๋ผ๊ณ  ํ•œ๋‹ค. Task ๊ธฐ๋Šฅ์˜ ๋ฉ”์„œ๋“œ ์ •์˜์„ค์ •๋œ ์ฃผ๊ธฐ(์Šค์ผ€์ค„๋ง)์— ๋งž์ถฐ์„œ ํ˜ธ์ถœ๋˜๋Š” Task ๋ฉ”์„œ๋“œ ์•ž์— @Scheduled ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ค์Œ์— ์ œ์‹œํ•œ ์†์„ฑ์ค‘ ํ•˜๋‚˜๋ฅผ ์ •์˜ํ•˜์—ฌ ์ถ”๊ฐ€ํ•œ๋‹ค - cron : CronTab์—์„œ์˜ ์„ค์ •๊ณผ ๊ฐ™์ด cron = "10 30 12 * * 5"๊ณผ ๊ฐ™์€ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค@Scheduled(cron = "10 50 12 * * 5")// ์ดˆ, ๋ถ„, ์‹œ, ์ผ, ์›”, ์š”์ผ(0:์ผ์š”์ผ)- fixedDelay : ์ด์ „์— ์‹คํ–‰๋œ Task์˜ ์ข…๋ฃŒ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ ์ •์˜๋œ ์‹œ๊ฐ„๋งŒํผ ์ง€๋‚œ ํ›„ Task๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.@Scheduled(fixedDelay..
2023.10.24
no image
tailwind
space-y-8 : ์†Œ์Šค์˜ ๊ฐ„๊ฒฉbg-red-100 : ๋นจ๊ฐ„์ƒ‰. ์ˆซ์ž๊ฐ€ ๋†’์•„์งˆ์ˆ˜๋ก ์ง„ํ•ด์ง„๋‹ค.shadow : ๊ทธ๋ฆผ์žrounded : radius w-96 : 96% :0.25rem*96w-1/4 : ํ™”๋ฉด์˜ 1/4 ์ฐจ์ง€text-xs : ํ…์ŠคํŠธ ์‚ฌ์ด์ฆˆ ๋‚˜ํƒ€๋ƒ„.์‚ฌ์ด์ฆˆ๊ฐ€ xs๋ผ๋Š” ๋œปshadow-mdshadow-lgshadow-xl :๊ทธ๋ฆผ์ž ํฌ๊ธฐ ๋‚˜ํƒ€๋ƒ„ p-3: padding์„ 3์„ ์คŒpt-3 : padding top. ์œ„๋กœ ์—ฌ๋ฐฑ 3์คŒpb-3 : ์•„๋ž˜๋กœ ์—ฌ๋ฐฑ 3์คŒpr-3 : ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์—ฌ๋ฐฑ 3์คŒpl-3 : ์™ผ์ชฝ๋กœ ์—ฌ๋ฐฑ 3์คŒ ๋งˆ์ง„ ๋ณ‘ํ•ฉ (๋งˆ์ง„ ๋ถ•๊ดด) : ์–ด๋–ค ์š”์†Œ์˜ ์•„๋ž˜์ชฝ ๋ฐ”๊นฅ์—ฌ๋ฐฑ์ด ๋‹ค๋ฅธ ์š”์†Œ์˜ ์œ„์ชฝ ์—ฌ๋ฐฑ๊ณผ ๋งŒ๋‚˜๋Š” ๊ฒฝ์šฐ ๋งˆ์ง„ ๋ณ‘ํ•ฉ(ํ•ฉ์ณ์ง€๋Š”) ํ˜„์ƒ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.paddingmargin hello w..
2023.10.14
no image
Mybatis
๋ชจ๋“  ์•„๊ทœ๋จผํŠธ๋งŒ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋งŒ ์„ค์ •ํ•˜๋ฉด ๋ชจ๋‘ ๋ฐ›๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค..@Delete("delete from meeting where id = #{id}")id๋ฅผ ๋ฐ›์•„์„œ ์‚ญ์ œํ•œ๋‹ค.@Update("update visitor set name = #{name}, memo = #{memo} where id = #{id}")์ด๋ฆ„๊ณผ ๋ฉ”๋ชจ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.id๊ฐ™์€ ๊ฑด ํžˆ๋“  ํƒ€์ž…์œผ๋กœ ํ•œ๋‹ค..public class MytableVO{ private String realName; private String nicName;}์ด๋ ‡๊ฒŒ ์–ธ๋”์Šค์ฝ”์–ด ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ๋„ ์•Œ์•„์„œ ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋งค์นญ๋œ๋‹ค. #{ ... }  :   where ename = #{ name }  (name์—๋‹ค SMITH๋„ฃ์œผ๋ฉด ename='SMITH..
2023.10.12