Framework
![[스프링] Build.Gradle & application.yml 관련 메모](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdhJEwM%2FbtrPL3783c0%2FAAAAAAAAAAAAAAAAAAAAACB7Run020l4Xri0p85zDa5lQtPSwsU23EgDL1VnIK4E%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3D1mrGnLvQ83ZJIboD8lN5Sfiroj0%253D)
[스프링] Build.Gradle & application.yml 관련 메모
1. 운영 서버와 테스트 서버의 DB 설정을 나누고 싶을 때 (1) 먼저 application.yml 에서 개발/운영 환경에 따라 DB 설정을 나눠준다. https://1minute-before6pm.tistory.com/12 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide#profile-groups (2) 그리고 나서 아래와 같이 Edit Configuraton의 Active prifiles를 설정한 profile 이름으로 바꾼다. ㄴ [추가] Build.Gradle 의존성에 대한 이해 - 너무나 복잡하게 profile을 쓰고 db를 application.yml에서 나눴는데, 그럴 필요가..
[Transaction] Transaction에 대한 이해 (& 스프링의 @Transactionl)
| 개요 - 서비스에서 @Transactional 을 사용할 때와 사용하지 않을 때 수정과 삭제 시 차이를 보이는 걸 경험했다. @Transactional update delete 사용 repository.save() 불필요 repository.delete() 시 삭제됨 미사용 repository.save() 필요 repository.delete() 시 삭제되지 않음 - 더불어 테스트에서 아래와 같이 @Transactional을 작성할 때, DB에 영구반영이 되지 않는 걸 확인했었다. // 아래는 TEST 코드 @SpringBootTest @Transactional public class JpaMemoRepositoryTest{ // 테스트 작성 } - 왜 그럴까? (1) 수정 시 save하지 않아도 수..
[JSON 파싱] ObjectMapper, Simple-json
1. ObjectMapper - Jackson 라이브러리를 활용한 것이라고 한다. - 수업에서는 test 코드를 작성할 때 ObjectMapper를 사용했다. https://why-dev.tistory.com/266 [스프링] Controller Test : Json-Path와 Jackson라이브러리 | 개요 - Controller Test에서는 URI를 통해 전송되는 HTTP 요청이 MVC 모델을 거친 후 응답하는 과정이 정상적인가를 확인한다. - 이 과정에서 스프링은 ObjectMapper를 통해 Json Object로 문자열을 파싱하는 J why-dev.tistory.com 2. simple-json 사용하기 - gradle의 경우 build.gradle에 아래를 넣어준다. implementatio..
[스프링] @AutoWired 동작 원리 및 DI injection 관련 설명 모음
1. @AutoWired 동작원리 https://beststar-1.tistory.com/40 @Autowired의 동작원리 @Autowired란? 의존관계 주입(DI)을 할 때 사용하는 어노테이션(Annotation)이며, 의존 객체의 타입에 해당하는 빈(Bean)을 찾아 주입하는 역할을 한다. 💡 의존관계 주입에 대해서는 IoC(Inversion of Control, beststar-1.tistory.com 2. 생성자 주입과 관련한 설명 https://jackjeong.tistory.com/41 [Spring] 생성자 주입 vs 필드 주입 (@Autowired) 안녕하세요~ 잭코딩입니다! 이번에는 스프링 프레임워크에서 의존성을 주입하는 방법을 살펴보고 어떤 방식으로 주입하는 게 좋은지 살펴볼까요? ..
[JPA] 인텔리J에서 JPA Entity 기반 ERD 그리기
https://gmlwjd9405.github.io/2019/10/28/intellij-jpa-erd.html [IntelliJ] intellij에서 JPA Entitiy 기반의 ERD 그리기 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io
![[HTTP] @RequestParam vs @RequestBody](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbeW4uI%2FbtrPrmMhCu6%2FAAAAAAAAAAAAAAAAAAAAAEuEYRV0bDv5McnAHIGjaZYzNiMRQYgzPZ7il_g8tEWO%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3D6q8jXnn0nsGHFCOEGMBzPwll7jE%253D)
[HTTP] @RequestParam vs @RequestBody
| 개요 - @RequestParam, @RequestBody - @RequestParam은 URI를 통해서 넘겨 받는 값을 말하고, - @RequestBody는 Http body에 데이터를 묶어서 받는 값을 말한다. - 일반적으로 RequestParameter는 ?key=value와 같이 단일 데이터를 넘겨 받고, RequestBody는 x-www-form-urlencoded나 Json과 같이 특정 데이터 포맷으로 묶여서 담겨지는 경우가 많다. - Post 방식으로 넘겨 받는 URI 모습 *body 값으로 다양한 데이터 포맷이 존재하는 걸 볼 수 있다. | 실험 - POST 방식으로 Body에 담겨 넘어오는 데이터의 타입을 크게 두 가지로 분류해보았다. (물론 데이터 타입은 더 다양하다) 1) x-ww..
[JPA] repository.save()의 반환값이 안 들어올 때
| 상황 - repository.save()를 하면 Entity타입의 객체가 반환되어야 하는데 아래와 같이 null이 반환됐다. /*Q14*/ // 트러블 슈팅 : 어? 뭐지? 데이터가 저장은 됐는데, Response값이 안온다. // -- 원인 ) Entity 인스턴스 비교(equals)를 위해 equals, hashcode 필요 @PostMapping("/api/notice4") public Notice addNotice4(@RequestBody NoticeRegister noticeRegister){ return noticeRepository.save( Notice.builder() .title(noticeRegister.getTitle()) .contents(noticeRegister.getCon..
[HTTP] User IP와 Agent(Device) 정보 가져오기
| User IP와 User Agent 정보란? - 클라이언트가 HTTP를 통해 어떤 요청을 보내면 HTTP header에 사용자 IP주소와 기기정보(Agent)가 담기게 된다. - User IP 주소는, 다양한 종류의 proxy를 고려하여 각 header를 전부 확인하는 것이 필요하다. - 만약 IPv4 형식으로만 IP주소를 얻길 원한다면 [Run]-[Configuration] Arguments VM에 설정을 걸어줄 수 있다. -Djava.net.preferIPv4Stack=true - 사이트 정책 : 로그인 시 히스토리 내역 저장한 후 메인화면으로 이동한다. - 위 정책에 따라 1) 히스토리를 저장할 Entity를 만들고, 2) 스프링 시큐러티를 이용해 로그인 성공시 사용자 IP주소와 Agent정보를..
![[LMS 만들기] 회원 탈퇴, 강좌 관리, 파일 업로드](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F7efg7%2FbtrN5kRo7yS%2FAAAAAAAAAAAAAAAAAAAAAPpdC6svj9HBXcCMFth-o8Wl5ls-qWg3r9FNe8uMNosJ%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DmXWJM3ut4YcoJayYmr8R2nIrC5g%253D)
[LMS 만들기] 회원 탈퇴, 강좌 관리, 파일 업로드
| Today I Leanred 1. 회원 탈퇴 - 정책에 따라 탈퇴회원의 정보를 특정 기간 동안 가지고 있을 수 있다. - 오늘 수업에서는 아래와 같이 회원을 초기화하되, 아이디 정보만 가지고 있는 식으로 만들었다. - 회원 정책으로는, 보통 아래처럼 아이디를 쌩으로 다 보여주지 않고 마스킹 처리를 하는 게 일반적이고, 약관에 따라 데이터를 저장하는 기간도 기억상 아마도 1년 정도였던 것 같은데, 개인정보보호법에 따라 정해진 기간 이상은 탈퇴 회원 정보를 가지고 있을 수 없다. 비밀번호 갱신에 대한 안내도 정기적으로 이루어지는데, 오늘 배운 내용보다 실제 서비스 로직은 훨씬 복잡할 것 같다. 2. BindingResult - 모델을 통한 데이터 바인딩 시 타입 미스매치와 같은 오류를 감지하는 역할 - ..