요구사항

분류 요구사항
과제 진행
  • 시작 시 문자열 덧셈 계산기 저장소를 포크하고 클론
  • 기능 구현 전 README.md에 구현할 기능 목록 추가
  • 위 목록 상 1개 기능 구현이 끝나면 Git 커밋
  • 프리코스 진행 가이드 문서)
    1. GitHub에서 타 저장소 -> 내 저장소로 fork(복사) 하는 방법 습득
    2. 터미널에서 GitHub 내 저장소를 PC로 clone(복제)하는 방법 암기
        git clone https://github.com/minitiated/{저장소아이디}.git
        cd {저장소 아이디} //clone한 폴더로 이동하는 방법

    3. 터미널에서 Git 브랜치 생성하는 방법 암기
        git checkout -b {브랜치명}
        * 모든 작업은 개인 브랜치에서 진행한다.
    4. IntelliJ에서 clone 프로젝트 가져오는 방법 습득 *Gradle로 가져오기 기억
    5. 기능 구현
    6. 터미널에서 기능 1개 구현 후 commit하는 방법 암기
      git status // 변경된 파일 확인
      git add -A(또는 .) // 변경된 전체 파일을 한번에 반영
      git commit -m "메시지" // 작업한 내용을 메시지에 기록
    7. 터미널에서 원격 저장소에 push하는 방법 암기
      git push origin {브랜치명}
프로그래밍
  • 1. JDK 21 버전 사용
    2. 프로그램 실행의 시작점은 Application의 main()
    3. build.gradle 파일은 변경 불가, 외부 라이브러리 사용 불가
    4. System.exit()를 호출하지 않고 앱 종료
    5. 파일, 패키지 등의 이름 변경, 이동 불가
    6. 자바 코드 컨벤션 준수 -  Java Style Guide
    7. camp.nextstep.edu.missionutils 제공 Console API를 사용하여 구현 - 사용자 입력값은 readLine() 활용

 

구현 내용

1. GItHub에서 우테코 저장소 -> 내 저장소로 Fork

이건 과제 공지가 제공하는 가이드에 잘 나와있어서 쉽게 했다.

 

2. 윈도우즈 터미널에서 특정 로컬 폴더로 Clone
// 사용한 Windows 터미널 명령어

// 디렉토리 내용물 보기
dir

// 클론받을 특정 폴더로 이동. 나의 경우 Documents에 저장하고 싶었다.
cd Documents

// 해당 폴더에 클론
git clone https://github.com/minitiated/java-calculator-7.git

// 브랜치 생성 전, 클론받은 폴더 내부로 이동(해야만 브랜치를 만들 수 있다. 지금은 Documents에 있는 상태.)
// 클론받은 폴더명을 모를 경우 다시 dir로 찾아서 이동
cd java-calculator-7

// 내 GitHub ID와 같은 이름으로 브랜치 생성
git checkout -b minitiated

//브랜치가 main에서 생성한 브랜치로 잘 옮겨져 있는지 확인
git branch


이것도 터미널 명령어(dir가 생각이 안 났다... 배웠는데 분명...)만 좀 검색해 봤지 쉽게 했다.

 

3. 프로젝트 임포트
임포트 창이 안 나와서 애를 먹었는데, 이 메뉴가 임포트랑 같은 역할을 하는 거였다.
여기서 클론받은 폴더 위치를 찾고, 안의 build.gradle을 선택해 준다.


과제 공지와 달리, 내 경우에는 File > New에서 빌드가 가능했다.

 

4. 자바 버전 맞추기
자바 버전 설정은 File > Project Structure에서 프로젝트마다 개별로 가능. 기존에 리팩토링 중이던 개인 프로젝트(JAVA 17)와 버전이 맞지 않아 고민했는데 정말 다행이다.

어째선지 내 경우에는 intelliJ가 기본 제공하는 것 같은 OpenJDK 21 다운로드가 안 되고, 자꾸 빨간 글씨로만 떴다.😭

지금은 캡쳐에 보이는 대로 21 (2) 로 OpenJDK가 잘 설치돼 있지만, 설치 전까지는 빨간색 21만 떴고, 제대로 적용도 안 됐다.

이 드롭다운창 아래에 보면 Download JDK... 라는 메뉴가 있는데, 거기서도 OpenJDK 21은 선택이 안 되었다. 이전에 한 번 받았다가 삭제한 적이 있는데, 그것과 연관된 오류같았다.

아마존의 코레토 등 다른 Java 21버전 SDK들도 있었지만 더 제너럴한 오라클의 OpenJDK를 쓰고 싶었기 때문에 결국 직접 파일을 받아서 적용하기로 함.

Java Platform, Standard Edition 21 Reference Implementations

위 링크에서,

저 링크를 클릭하면 OpenJDK Java 21 버전 zip파일을 내려받을 수 있다.

해당 파일을 내려받아 C드라이브에 저장했다.

그리고 다시 intelliJ로 돌아와서,

Add JDK...를 누른다.
직접 내려받은 파일을 압축 해제한 폴더. 내부에 따로 설치파일은 없고, 압축 해제하면 바로 저런 내용물이 들어있는 폴더가 나온다.

해당 파일을 내려받아 zip 압축을 푼 폴더 선택

잘 들어갔다.

그러면 위와 같은 화면이 나온다.

Project Structure > 좌측 사이드바 Platform Settings > SDKs

나같은 경우는 좌측 Project Structure 메뉴 중 Platform Settings > SDKs > 방금 가져다 넣은 SDK인 21 (2)를 클릭하고 Classpath 탭 아래의 +를 눌러서 다시 폴더 위치를 선택해 주어야 Classpath들이 설정되었다.
압축해제한 폴더 위치를 제대로 선택하면 지금 캡쳐에 보이는 Classpath들은 자동으로 전부 추가가 되었다.

이전에 개인 프로젝트 버전 설정하다가 여러 번 꼬인 적 있어서 심적으로 큰 산처럼 느껴지던 버전 설정이 생각보다 수월하게 완료되었다!

미션 분석 시 과제 공지에
6. 터미널에서  java -version을 실행하여 Java 버전이 21인지 확인 / intelliJ Java 21 세팅 확인
7. 터미널에서 gradlew.bat clean test 또는 ./gradlew.bat clean test 실행 시 아래와 같이 통과하는지 확인
   BUILD SUCCESSFUL in 0s​

 

이런 부분이 있었기 때문에 intelliJ 터미널로 테스트를 해봤다.

터미널은 intelliJ 하단 제일 좌측을 보면 아이콘만 있는 사이드바가 있는데, 거기서 터미널 아이콘을 누르거나 Alt+F12로 띄울 수 있다.

그런데 나의 경우, 기존에 진행하던 프로젝트가 17버전이어서 그런지 여기서 java -version을 입력한 결과가 계속 17로 떴다.
그렇지만 build.gradle이 21이니까 괜찮지 않을까?

버전을 잘못 설정했는지 아니면 기존 프로젝트 때문인지 헷갈려서 나중에 맞추기로 하고 우선 넘어감.
구글링해서 나오는 내용은 아래만 빼면 모두 이미 설정과정에서 설정해 뒀었고, 아래 캡쳐 내용만 한 번 바꿔줬으나 여전히 java -version을 터미널에 입력 시 
java version "17.0.12" 2024-07-16 LTS                                                                                                                                
Java(TM) SE Runtime Environment (build 17.0.12+8-LTS-286)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.12+8-LTS-286, mixed mode, sharing)

라고만 뜬다...

Project Structure > Modules > Language Level > 21로 설정해 줌

찝찝하니 해결하면 해결했다고 후기를 써야겠다.
> 자기 전 구글링해 보니 터미널에 설정된 환경변수에 따라 터미널과 프로젝트의 java 버전은 서로 다를 수 있고, 내 터미널은 17 버전을 사용하지만 프로젝트는 21 버전을 잘 사용하고 있는 것 같다. 뭐하면 일요일날 제출해서 돌려보면 알겠지. 굿!

 

7. 인코딩 UTF-8 세팅

그러나 Java -version은 그렇다 치고, ./gradlew.bat clean test를 진행하니 한글이 깨져서 빌드가 되지 않는 상황 발생
분명 Settings에 encod 검색해서 다 UTF-8로 맞춰 줬었는데?


error: unmappable character (0xED) for encoding x-windows-949

콘솔에 이게 떴다. 949라는 다른 인코딩으로 진행되는 것 같아서 문제가 뭔지 찾기 시작함.

File Encodings에서 세 번째 드롭다운 아래 Transparent native-to-ascii conversion 체크해 줬지만 소용 없음

다시 빌드해 봤지만 여전히 안 됨.

Help > Edit Custom VM Options...
위 메뉴를 누르면 뜨는 vmoptions 창에
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8​

 

 

추가. 그러나 여전히 오류가 남.

제어판 > 날짜, 시간 또는 숫자 형식 변경 > 국가 또는 지역 > 상단탭 관리자 옵션 > 시스템 로캘 변경 > Beta: 세계 언어 지원을 위해 Unicode UTF -8 사용 체크

위를 설정하고 재부팅을 시도.

최종 빌드는 실패가 떴지만 그건 코드를 작성하지 않아서 테스트 코드에서 에러가 뜬 것. 10개 좀 넘게 뜨던 인코딩 실패는 모두 사라졌다.

UTF-8 설정이 올바르게 적용되었다!
테스트 코드는 일단 주석 처리하고 시작하면 될 것 같다.
Build를 Gradle이 아닌 IntelliJ에서 하면 굳이 제어판에서 저 부분을 변경하지 않아도 된다고 하는데, 나는 가능하면 그 부분은 건드리지 않고 Gradle에서 빌드하고 싶어서 시스템 설정을 바꿨다. 

이 상태로 빌드는 성공했지만, 문제는
Process 'command 'C:/openjdk-21경로/bin/java.exe'' finished with non-zero exit value 1​


위와 같은 에러가 계속 발생한 것. 이건 어떻게 해결했냐면, 구글링을 통해 답을 찾았다.



여기서 나오는 4가지 항목 다 체크하고 캐시를 날려버리자 Gradle(Default)로도 빌드 앤 런 잘 되기 시작했다. 행복...

 

6. readMe.md 쓰기

어제 작성해 두었던 미션 분석글에 필요한 기능을 적어두었다.
그런데 내가 생각하기에는 도대체 어떻게 메서드를 나누어야 할지 전혀 감이 안 잡혔다...
맞는지 아닌지도 모르겠음. 그래도 한 번 완성할 때까지 어떻게든 내 힘으로 해보고자 엉망으로 기능 목록을 작성했다.
그걸 과제 공지대로 readMe.md에 먼저 붙여넣었다.

intelliJ 내부에서 수정이 가능한 줄 알았는데, 그게 아니라 GitHub에서 작성하는 거였다!
.md라는 확장자 자체가 Git에서 사용되는 확장자라고 한다.
다른 사람들은 README를 어떻게 작성하는지 구글링 한 번 해 보고, 시간이 많지 않아서 바로 기능 목록만 작성했다.
# java-calculator-precourse

### 정리할 기능 목록
---
- 문자열 입력 받는 스캐너와 같은 기능
- 입력된 문자열 "" 체크 기능 - ""일 시 0 반환, ""가 아닐 시 다음으로
- 커스텀 구분자 유무 체크 기능 - 문자열이 "//"로 시작하는지 체크
  - 있을 시 나머지 문자열에서 " \n" 찾아 커스텀 구분자 추출 기능
     - 이후 "커스텀 구분자, 세미콜론, 콜론" 기준 문자열 분리 기능
   - 없을 시
     - 나머지 문자열에서 "세미콜론, 콜론" 기준 문자열 분리 기능
- 분리된 문자열 전체 양수 유무 체크 기능
   - 문자열의 숫자 변환 후 하나라도 양수가 아닐 시 (문자, 음수 등) 예외 처리
- 숫자 덧셈 처리 및 반환하여 출력 기능
- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션 종료​



처음에는 main 에 바로 작성하다, 내 branch에서 작성해야 되는 거 아닌가 생각이 들어서 우선 git에 첫 push 먼저 한 번 실행.

나름 역사적인 프리코스 첫 push

푸쉬를 마치고 나니 내 GitHub ID명으로 만든 브랜치가 GitHub 리파지토리에도 잘 생겼다.
README.md도 GitHub에서 연필 버튼 눌러 수정해서 해당 브랜치에 바로 커밋.
뭔가 결과물로 나오는 마크다운 폰트 크기나 생김새가 마음에 안 들지만 내용 수준의... 심각성.. . . .. . ..에 비하면 별 문제도 아니기 때문에 나중에 수정하기로 하고 넘어감.

intelliJ 내에서도 볼 수 있게 git pull origin {내 브랜치명}을 통해 README.md를 풀도 받아주었다.

 

7. 우테코 자바 스타일 가이드 xml 파일 적용

[BE] Jazzy님이 프리코스 커뮤니티에 링크해 주신 글을 참고해서 진행했다. 다시 한 번 감사합니다!
나는 영문판이고 IDEA 버전이라 그런지 다른 부분들이 있어서, 캡쳐와 같이 기록하고자 한다.

우선 GitHub 우테코 자바 스타일 가이드에서 C드라이브로 xml 파일을 내려받았다.

Settings > Editor > Code Style > Java > 상단 Scheme 우측 톱니바퀴 > import Scheme > IntelliJ IDEA code style XML

위 경로를 따라가며 버튼을 누르면 이런 창이 뜬다.

내려받은 xml 파일을 찾아서 선택
기본형으로 이름 만들어주는 거 같다. OK
다시 좌측 사이드바에서 Java가 아닌 상위 Code Style 메뉴 클릭 > Enable EditorConfig support 체크
Settings > 사이드바에서 Tools (Editor가 아니다!) > Actions on Save > Reformat code 체크, Optimize imports 체크 > OK

위 과정을 완료하면 xml 파일이 적용되고, 임포트 시마다 옵티마이제이션 or 세이브 시마다 코드 리포맷이 되는 것 같다. 편하네!

 

8. 기능 1개 구현하기
마참내
드디어 기본 세팅이 완료되어서 코드를 짤 수 있게 되었다. 5시에 시작했고 지금이 9시니까 4시간만에! 😭
> 빌드 에러 잡느라 11시 넘어서야 진짜로 main 메서드 실행해 볼 수 있게 되었다............ 일단 자고 생각한다

TODO: 프로그램 구현

열어보니 이렇게 간단하게 구성되어 있었다. 우선 입력 기능 하나만 먼저 만들어 보고 커밋하기로 했다.
> 오늘 꼭 하고 싶었는데 내일로 미뤘다. 어차피 여기서부턴 기능 구현이니 글 분리해서 새로 만들어야지.

미션 분석글 中 프로그래밍 요구사항


Console API와 readLine()을 활용하라는 과제 공지에 따라 만들기로 함.

 

9. Git 컨벤션에 맞춰서 커밋 1회 하기
> 이것도 다음 게시물로 넘어감

 
 

비고

1. 생각해 보니 git에서 로컬로 리파지토리를 클론해오는 게, 따로 로컬 터미널에서 계정 설정을 하지 않으면 안 됐던 거 같다.
    로컬 터미널에서 git 계정 설정하는 법도 알아둬야겠다.
2. java -version 실행했을 때 자꾸 17로 떠서 좀 불안하다. SDK 다 21로 맞춰 놨는데도... 
    > 이대로 잠들기 찝찝해서 구글링해 보고 chatGPT한테도 물어봤는데, 터미널과 프로젝트의 JAVA 버전 설정이 다를 수 있고 java -version은 터미널의 환경변수로 설정된 버전을 묻는 거라고 함. 내 경우 프로젝트는 21이 맞고, 터미널의 환경변수는 17로 설정돼 있는 거 같다! 개인 프로젝트는 17버전이니까 굳이 건드리지 않고 그냥 사용하기로 결정함.

 

'개발지식 조각 > 기타' 카테고리의 다른 글

암호화와 SSL  (0) 2024.12.17
객체 지향 생활 체조 원칙(Object Calisthenics)  (3) 2024.10.31
마크다운 문법과 README.md  (0) 2024.10.31

+ Recent posts