일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MySQL
- SQL
- 안드로이드스튜디오
- 인프런
- 티스토리챌린지
- Android
- doitandroid
- 정보처리기사
- 안드로이드
- 자료구조
- 혼공단
- join
- groupby
- 알고리즘
- 코테
- java
- 혼공챌린지
- Til
- Kotlin
- 자바
- select
- CS
- 프로그래머스
- 오블완
- 기술면접
- 혼공파
- 스터디
- 정처기
- 카카오코테
- 코틀린
- Today
- Total
목록분류 전체보기 (372)
Welcome! Everything is fine.
이번 프로젝트를 끝내고, 지난 프로젝트에서 아쉬웠던 점을 정리해봤다.🖋️그런 점을 이번 프로젝트에서 꽤 많이 개선한 것 같고, 이번 프로젝트에서의 아쉬운 점 역시 다음 프로젝트에서 개선할 수 있다면 좋을 것 같다!팀원들과 사소한 것 하나까지 공유하자지난 프로젝트에서는 git에 익숙하지 않은 팀원분들이 많았다. 그래서인지 사실 내가 맡은 기능을 개발하는 시간보다 git 관련 문제를 해결하는데 더 많은 시간을 쓴 것 같다. 우리팀에서 일어난 문제는 다음과 같았다.merge가 되면 develop에서 pull을 받은 후, 자신의 브랜치에서 작업을 해야한다. 그러나 중간에 확인해보니 팀원 모두가 pull을 받지 않고 작업을 하고 있다는 사실을 알았다. 자신의 브랜치에서는 자신이 맡은 기능만을 개발해야한다고 알고..

이번 심화 프로젝트를 진행하다가 튜터님께 피드백 받은 내용이 있다.사실 이 부분은 정신 놓고 코드 짠거 같아서 부끄럽지만..같은 실수를 하지 않기 위해 정리해본다. 🛠️ 변경 전 코드우선 OwnerOrderController는 가게 사장님이 들어온 주문을 수락 및 거절하는 API를 가지고 있다. 수락이 되었다면 음식조리중, 배달중, 배달완료 순으로 흐를 수 있도록 해야한다. 다음 코드를 보면, 각각의 상태에 따라 API가 다 따로 만들어져있다. 처음에는 상태가 되돌아 갈 수 없도록 하는 것에만 집중해서 예외 처리만 하고 끝냈다.@RestController@RequiredArgsConstructor@RequestMapping("/api")public class OwnerOrderController { ..

Main 실행 시 에러 발생처음 프로젝트를 받아 실행하니 다음과 같은 에러가 나왔다. 에러 메세지가 길긴 하지만 잘 읽어보면 JWT 시크릿 키에 대한 문제인 것을 짐작할 수 있다. application.properties 파일에 키를 넣으려고 했는데, 아예 resourse 폴더가 없었다. 따라서 먼저 키를 만들어야 했다.java.lang.IllegalArgumentException: Could not resolve placeholder 'jwt.secret.key' in value "${jwt.secret.key}"org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtUtil': Injection..

다음 getTodos() 메서드에서 발생하고 있는 N+1 문제를 @EntityGraph를 사용해 해결해야 한다.public Page getTodos(int page, int size) { Pageable pageable = PageRequest.of(page - 1, size); Page todos = todoRepository.findAllByOrderByModifiedAtDesc(pageable); return todos.map(todo -> new TodoResponse( todo.getId(), todo.getTitle(), todo.getContents(), todo.getWeather(), ..
튜터님의 해설 강의를 듣고 일정 관리 앱 과제를 리뷰하다가 알게 된 내용을 간단하게 포스팅 해본다. 이번 일정 관리 앱 과제에서 튜터님의 코드와 비교했을때, 가장 큰 차이 중 하나는 세션을 사용하는 방식이었다. 나는 HttpSession을 직접 가져와 사용하는 방식을 사용했다. 반면 튜터님은 @SessionAttribute 어노테이션을 사용하여 세션 속성을 자동 주입하는 방식을 사용하셨고, 그 방법이 더 쉽게 세션을 사용할 수 있는 것 같다.📌 세션을 사용하는 방식HttpSession 사용하기내가 작성한 댓글 생성 기능 부분이다. HttpServletRequest에서 HttpSession을 가져와 세션키를 사용하고 있다. 이 방법은 Servlet API에서 제공하는 기본적인 세션 관리 방식으로, 직접 ..

Converter 사용하기Spring은 기본적인 컨버터를 제공하지만, 컨버터를 커스텀하게 구현할 수도 있다. 예를 들면, String 값을 특정 객체를 변환하고 싶다면 커스텀 컨버터를 구현해야 한다. 강의 실습을 따라 String 값을 Person 객체로 변환하는 컨버터를 구현해보자. Person 객체는 name과 age 필드를 갖는다. Controller에서 URL 파라미터를 Person 객체로 반환해야 한다면 커스텀 컨버터를 구현 후, WebMvcConfigurer 에서 등록해야 한다.@GetMapping("/type-converter")public void typeConverter(@RequestParam Person person) { log.info("person.getName() = {}"..
문제점develop 브랜치에서 git pull origin develop을 하려는데 에러가 발생했다.에러 메세지를 읽어보니 내 브랜치에서 아직 커밋되지 않은 변경 사항이 존재하기 때문에 발생한 것이었다.하지만 현재 내 로컬 브랜치에서의 작업이 아직 끝나지 않아서 commit하고 싶지 않았다.해결 방법변경 사항을 유지하면서 git pull 하는 방법으로 진행했다. 1) 변경 사항 임시 저장git stash push -m "임시 저장" 2) 원격 저장소에서 최신 코드 가져오기git switch developgit pull origin develop 로컬 develop 브랜치에 원격 develop 코드를 가져올 것이기 때문에 develop 브랜치로 이동 후 진행했다. 3) 다시 내 브랜치로 이동 후 변경 사항..
강의를 참고하여 비밀번호 수정 기능을 구현하던 중, 왜 단순히 Setter를 사용하지 않고 updatePassword() 메서드를 따로 만들어야 하는지 의문이 들었다. public void updatePassword(String password) { this.password = password;} Member 엔티티에서 아래와 같이 @Setter를 password 필드 위에 추가하면 안되는 것일까?@Setter@Column(nullable = false)private String password; 찾아보니 Setter의 사용을 지양하는 이유는 여러가지가 있었다. 1️⃣ Setter를 사용하면 객체의 일관성을 유지하기 어렵다.어디서든 값이 변경될 수 있어 데이터 무결성이 깨질 위험이 있다.2️⃣ Se..