Skip to content

Conversation

@HuInDoL
Copy link
Collaborator

@HuInDoL HuInDoL commented Apr 13, 2025

기본 요구사항

프로젝트 초기화

[ x ] IntelliJ를 통해 다음의 조건으로 Java 프로젝트를 생성합니다.
[ x ] IntelliJ에서 제공하는 프로젝트 템플릿 중 Java를 선택합니다.

[ x ] 프로젝트의 경로는 스프린트 미션 리포지토리의 경로와 같게 설정합니다.

예를 들어 스프린트 미션 리포지토리의 경로가 /some/path/1-sprint-mission 이라면:

Name은 1-sprint-mission
Location은 /some/path
으로 설정합니다.

[ x ] Create Git Repository 옵션은 체크하지 않습니다.

[ x ] Build system은 Gradle을 사용합니다. Gradle DSL은 Groovy를 사용합니다.

[ x ] JDK 17을 선택합니다.

[ x ] GroupId는 com.sprint.mission로 설정합니다.

[ x ] ArtifactId는 수정하지 않습니다.

[ x ] .gitignore에 IntelliJ와 관련된 파일이 형상관리 되지 않도록 .idea디렉토리를 추가합니다.

...
.idea
...

도메인 모델링

[ x ] 디스코드 서비스를 활용해보면서 각 도메인 모델에 필요한 정보를 도출하고, Java Class로 구현하세요.
[ x ] 패키지명: com.sprint.mission.discodeit.entity
[ x ] 도메인 모델 정의
[ x ] 공통
[ x ] id: 객체를 식별하기 위한 id로 UUID 타입으로 선언합니다.
[ x ] createdAt, updatedAt: 각각 객체의 생성, 수정 시간을 유닉스 타임스탬프로 나타내기 위한 필드로 Long 타입으로 선언합니다.
[ x ] User
[ x ] Channel
[ x ] Message
[ x ] 생성자
[ x ] id는 생성자에서 초기화하세요.
[ x ] createdAt는 생성자에서 초기화하세요.
[ x ] id, createdAt, updatedAt을 제외한 필드는 생성자의 파라미터를 통해 초기화하세요.
[ x ] 메소드
[ x ] 각 필드를 반환하는 Getter 함수를 정의하세요.
[ x ] 필드를 수정하는 update 함수를 정의하세요.
서비스 설계 및 구현
[ x ] 도메인 모델 별 CRUD(생성, 읽기, 모두 읽기, 수정, 삭제) 기능을 인터페이스로 선언하세요.
[ x ] 인터페이스 패키지명: com.sprint.mission.discodeit.service
[ x ] 인터페이스 네이밍 규칙: [도메인 모델 이름]Service
[ x ] 다음의 조건을 만족하는 서비스 인터페이스의 구현체를 작성하세요.
[ x ] 클래스 패키지명: com.sprint.mission.discodeit.service.jcf
[ x ] 클래스 네이밍 규칙: JCF[인터페이스 이름]
[ x ] Java Collections Framework를 활용하여 데이터를 저장할 수 있는 필드(data)를 final로 선언하고 생성자에서 초기화하세요.
[ x ] data 필드를 활용해 생성, 조회, 수정, 삭제하는 메소드를 구현하세요.
메인 클래스 구현
[ x ] 메인 메소드가 선언된 JavaApplication 클래스를 선언하고, 도메인 별 서비스 구현체를 테스트해보세요.
[ x ] 등록
[ x ] 조회(단건, 다건)
[ x ] 수정 // data symbol 인식 오류
[ x ] 수정된 데이터 조회
[ x ] 삭제 // data symbol 인식 오류
[ x ] 조회를 통해 삭제되었는지 확인
기본 요구사항 커밋 태그
[ ] 여기까지 진행 후 반드시 커밋해주세요. 그리고 sprint1-basic 태그를 생성해주세요. // 커밋을 늦게 했습니다.

심화 요구 사항

###서비스 간 의존성 주입
[ ] 도메인 모델 간 관계를 고려해서 검증하는 로직을 추가하고, 테스트해보세요. // 제대로 한 건지 모르겠습니다.
힌트: Message를 생성할 때 연관된 도메인 모델 데이터 확인하기

주요 변경사항

  • 위 체크사항에 서술됨

스크린샷

JCFMessageService class 오류
data 객체 불인식 오류)

멘토에게

  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

  • 일단 미완성으로 제출한 것에 대해 정말 죄송합니다.

  • 아직 개념들이 완전히 정리되지 않은 상태로 미션을 진행하다보니 막히는 점이 정말 많았고 구글링이 아닌 chatGPT로 모르는 점을 많이 물어보았습니다.

  • 그래서 코드가 뒤죽박죽입니다.

  • 질문사항

  • (1) 1번째 사진에서 왜 JCFMessageService.java가 생기고 그 밑에 클래스 파일이 생겼는지 모르겠습니다. 원래는 없었는데 코드를 작성하다보니 어느 순간 저게 생겨있었고 밑에 클래스 파일을 삭제하면 대부분의 코드가 사라졌습니다.

  • (2) 2번째 사진에서 updateMessage가 data를 인식하지 못합니다. 이것 역시 어느 순간 이렇게 돼 있었습니다.

  • (3) 의존성 주입에 대해 개념이 완전히 정리되지 않은 상태로 코드를 작성하면서 생기는 오류들을 해결하다 보니 어느 오류를 해결하면 또 다른 오류가 생기는걸 반복했습니다. 개념은 익히면 되지만 사실 개념을 익히고 나서도 많은 오류가 생기는 걸 막을 수 있을지 모르겠습니다. 처음부터 어떻게 접근해야 하는지, 코드는 어떤 것을 중점에 두고 어떤 순서로 작성해야 하는지 모르겠습니다.

  • (4) 전반적인 개념이 많이 부족한데 물론 다 공부해야 한다고 생각하지만 어떤 것들이 가장 중요하고 가장 먼저 완전히 익혀야 하는지 알려주시면 감사하겠습니다.

  • (5) 아는게 많이 없다보니 질문도 매우 부족합니다. 그래도 많이 알려주시면 감사히 배우겠습니다.

@HuInDoL HuInDoL requested a review from codingjigi April 13, 2025 06:39
@HuInDoL HuInDoL added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🛠️ 스프린트 미션 제출일이지만 미완성했습니다. 죄송합니다. labels Apr 13, 2025
@codingjigi
Copy link
Collaborator

(2) 2번째 사진에서 updateMessage가 data를 인식하지 못합니다. 이것 역시 어느 순간 이렇게 돼 있었습니다.

일단 전역변수 Map 에 세미콜론이 2개가 붙어있네요. 이거 지워보시고, 인터페이스와 구현체의 메서드 시그니처가 오류나고 있어요. 먼저 이 부분 고쳐보시겠어요?

@codingjigi
Copy link
Collaborator

(3) 의존성 주입에 대해 개념이 완전히 정리되지 않은 상태로 코드를 작성하면서 생기는 오류들을 해결하다 보니 어느 오류를 해결하면 또 다른 오류가 생기는걸 반복했습니다. 개념은 익히면 되지만 사실 개념을 익히고 나서도 많은 오류가 생기는 걸 막을 수 있을지 모르겠습니다. 처음부터 어떻게 접근해야 하는지, 코드는 어떤 것을 중점에 두고 어떤 순서로 작성해야 하는지 모르겠습니다.

일단 내가 잘 아는 방법으로 구현해보는 연습을 해보는게 좋을 것 같아요. 기본적인 동작 원리를 이해해야 다음 단계로 갈 수 있다고 생각합니다. 의존성 주입이 어렵다면 먼저 의존성 주입 방법이 아닌 직접 선언하는 방법으로 구현해보고, 의존성 주입 방법으로 리팩터링을 하면서 진행해보시죠

@codingjigi
Copy link
Collaborator

(4) 전반적인 개념이 많이 부족한데 물론 다 공부해야 한다고 생각하지만 어떤 것들이 가장 중요하고 가장 먼저 완전히 익혀야 하는지 알려주시면 감사하겠습니다.

위에서 드린 답변과 비슷한 내용인데, 우선 동작하는 코드를 먼저 만드는게 중요할 것 같습니다. 지금은 실행되지 않는 코드라서 디테일한 리뷰가 어려운 부분이 있네요

@codingjigi
Copy link
Collaborator

(1) 1번째 사진에서 왜 JCFMessageService.java가 생기고 그 밑에 클래스 파일이 생겼는지 모르겠습니다. 원래는 없었는데 코드를 작성하다보니 어느 순간 저게 생겨있었고 밑에 클래스 파일을 삭제하면 대부분의 코드가 사라졌습니다.

요고는 파일명이랑 클래스명이 다르면 그렇더라구요~ 디스코드에서 해결된 것 같아 제 사례만 잠깐 말씀드리고 갑니다

Copy link
Collaborator

@codingjigi codingjigi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다. 모르는 내용은 멘토링 시간에 자주 질문 부탁드려요~

import java.util.UUID;

public class Base {
private UUID id; // Channel CRUD를 위해 UUID가 필요한가?
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상속으로 잘 표현해주셨어요. 다만 id 전략이 바뀔 경우 고민해보는 것도 좋을 것 같습니다~


public class Channel extends Base {
private String channelName;
private List<User> members = new ArrayList<>(); // Channel List안에 members List를 넣고 member와 message로 이루어진 LinkedList를 만들고 싶음
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아이디어 좋네요 👍

import java.util.stream.Collectors;

public class JCFMessageService implements MessageService { // 왜 오류가 뜨는지도 모르겠음 ㅠㅠ 그냥 안돼 그냥 안돼 그냥 안돼
private final Map<UUID, Message> data = new HashMap<>();;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

;;

Copy link
Collaborator Author

@HuInDoL HuInDoL Apr 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

늦은 시간까지 조악한 코드 뜯어보시느라 고생해주셔서 너무 감사합니다.
사실 어제 오늘 스프린트 미션2를 진행하면서 하나를 고치면 하나가 망가지기에 해답 코드를 보고 베끼고 분석해가면서 전부 다 다시 작성했습니다. 그래서 머지해주신 리모트 브랜치를 어떻게 처리해야 할지 모르겠습니다. 스프린트 미션1 브랜치(임정현-sprint1)에서 브랜치(임정현-sprint2)를 따로 파서 거기에 다시 다 작성했는데, 리모트를 풀하고 나서 (임정현-sprint2)를 덮어 씌울까요?
그리고 말씀해주신 것처럼, 일단 구동 가능한 코드를 짜고, 거기에 리팩토링하는 식으로 계속 시도해보겠습니다.
다시한번 검토해주셔서 정말 감사합니다!
좋은 하루 되세요 :D

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

늦은 시간까지 조악한 코드 뜯어보시느라 고생해주셔서 너무 감사합니다. 사실 어제 오늘 스프린트 미션2를 진행하면서 하나를 고치면 하나가 망가지기에 해답 코드를 보고 베끼고 분석해가면서 전부 다 다시 작성했습니다. 그래서 머지해주신 리모트 브랜치를 어떻게 처리해야 할지 모르겠습니다. 스프린트 미션1 브랜치(임정현-sprint1)에서 브랜치(임정현-sprint2)를 따로 파서 거기에 다시 다 작성했는데, 리모트를 풀하고 나서 (임정현-sprint2)를 덮어 씌울까요? 그리고 말씀해주신 것처럼, 일단 구동 가능한 코드를 짜고, 거기에 리팩토링하는 식으로 계속 시도해보겠습니다. 다시한번 검토해주셔서 정말 감사합니다! 좋은 하루 되세요 :D

네 그렇게 하면 될 것 같아요 ㅎㅎ 어려움 있으면 멘션주세요~

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

감사합니다!!!

@codingjigi codingjigi merged commit 1871a9b into codeit-bootcamp-spring:임정현 Apr 15, 2025
dongjoon1251 pushed a commit that referenced this pull request Jul 15, 2025
refactor: dto 이름 수정, 주석 수정, 사용하지 않는 클래스 파일 삭제 등등
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🛠️ 스프린트 미션 제출일이지만 미완성했습니다. 죄송합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants