일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 백준
- 백준 19238
- Spring
- 백준 17779
- java
- 프로그래머스
- Coroutine
- JVM
- java 기술면접
- spring oauth
- MySQL
- MSA
- re.split
- 백준 16719
- springboot
- 백준 15685
- sql 기술면접
- 웹어플리케이션 서버
- JPA
- Spring Boot
- with recursive
- spring cloud
- spring security
- 프로래머스
- Kotlin
- 백준 파이썬
- 백준 16236
- 백준 16235
- 백준 17626
- 파이썬
- Today
- Total
목록Spring Boot (41)
시작이 반
업무 로직 빈 : 컨트롤러, 비지니스 로직이 있는 서비스, 레포지토리 등 비지니스 요구사항을 개발할 때 기술 로직 빈 : 기술적인 문제나 공통 관심사(AOP)를 처리할 때 점점 자동 빈 등록으로 가는 추세이다. 빈이 많아지고 설정 정보를 관리하는 것 자체가 부담이 된다. 자동빈을 사용해도 OCP, DIP를 모두 지킬 수 있기 떄문에 업무 로직에 관해서는 자동을 사용하는 것이 좋다. 기술 로직같은 경우 업무 로직에 비해 수가 적고 광범위하게 영향을 미치고 기술 로직같은 경우 잘 되고 있는지 아닌지 파악하기 어려운 경우가 많기 때문에 수동빈을 사용해서 명확하게 나타내는 것이 좋다. 또한 비지니스 로직에서 다형성을 적극 활용할 때 수동 등록을 사용해서 한번에 보기 쉽게 하는 것이 좋지만 그래도 자동 빈을 쓰고..
ComponentScan을 통해서 Component 어노테이션이 붙은 객체들을 스프링 컨테이너에 스프링 빈으로 등록하게 된다. ( ComponentScan은 스프링 부트를 시작시키는 메인 메소드의 @SpringBootApplication 어노테이션을 까보면 상단에 걸려있다. 즉, 메인 메소드의 패키지부터 스캔한다. ) ( 어노테이션은 상속이 안됨 근데 어떻게 이식하냐? 자바 언어가 지원하는 것이아니라 스프링이 지원하는 것임 ) ComponentScan시 같은 이름이 여러개가 있을때 무엇을 스프링 컨테이너에 저장하는가? - 자동 빈 등록 vs 자동 빈 등록 : 오류 -> 예외 - 수동 빈 등록 vs 자동 빈 등록 : 수동 빈 등록이 우선권을 가진다. 근데 최근 스프링 부트는 기본적으로 오류가 나도록 바뀜 ..
1. 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라고 한다. new AnnotationConfigApplicationContext를 사용하여 어노테이션 기반으로 설정된 class를 기반으로 스프링 컨테이너를 만든다. AppConfig는 객체를 생성하는 class이다. 어노테이션으로 configuration과 빈을 설정해준다. @Configuration public class AppConfig { @Bean public MemberService memberService(){ return new MemberS..
프로젝트 생성시 자꾸 찾아보는 것들.. dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' //타임리프 implementation 'org.springframework.boot:spring-boot-starter-web' //웹 //롬복 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' //mysql compile 'mysql:mysql-connector-java' //data-jpa implementation 'org.springframework.boot:spring-boot-starter-data..
삭제 let index = { replyDelete: function (boardId, replyId) { $.ajax({ type: "DELETE", url: `/api/board/${boardId}/reply/${replyId}`, dataType: "json" }).done(function (response) { location.reload(); alert("댓글삭제 완료"); }).fail(function (error) { alert(JSON.stringify(error)); }); } }
유튜브 강의를 듣다가 Entity를 Client, Controller, Service단을 모두 사용하는 것을 보고 Entity는 Client, Controller단에서 쓰이면 안된다는 것을 본적이 있어서 DTO, Entity의 관계에 대해 찾아봤다. (이미 강의를 들으면서 작성한 코드는 모두 Entity로 접근을 하였기 때문에 나중에 DTO로 바꾸는 리팩토링 작업을 한꺼번에 행봐야겠다.) Entity는 Controller, Client단에서 쓰이면 직접 쓰이면 좋은 설계가 아니다. Entity를 DTO로 바꿔 사용해야한다. Entity DB에 저장하기 위해 유저가 정의한 클래스 - Domain 실제 DB테이블과 매칭 RDBMS에서 Table을 객체화 시킨것 이라고 생각... setter금지 @Getter..
공부한 내용이므로 틀린 내용이 있을 수 도있습니다... 위의 구조를 코드를 짜면서 이해한 내용이다. 회원 수정을 하면 DB의 값을 변경해야 할 뿐아니라 세션 값도 변경해줘야 한다. 회원수정 코드 이다. ajax로 id, username, password를 가져온다. update: function (){ let data ={ id:$("#id").val(), username:$("#username").val(), password:$("#password").val() } $.ajax({ type:"PUT", url:"/user", data:JSON.stringify(data), //object -> json contentType:"application/json; charset=utf-8", dataType:..
로그인이 정상적으로 됐으면 해당 Redirect URI로 code가 넘어옴 @GetMapping("/auth/kakao/callback") public String kakaoCallback(@RequestParam("code") String code){ OAuthToken oAuthToken = kaKaoApiService.tokenRequest(code); //1.토큰 가져오기 KakaoProfile kakaoProfile = kaKaoApiService.userInfoRequest(oAuthToken); //2.유저정보 가져오기 int idx = kakaoProfile.getKakao_account().getEmail().indexOf("@"); String username = kakaoProfile..