주간 랩업/[SSG] JAVA 기반 백엔드 개발 과정

[1주차] OT와 자바 베이직 1 ~ 3일차

hooooolly 2024. 6. 20. 22:31

신세계I&C 가 주관하는 JAVA 백엔드 과정 4기에 합격했다..!

원래 절차는 코딩테스트도 있다고 하는데 이번 기수는 코테를 보지 않고 통화 면접을 보았다.

 

전화로 면접을 보고 3일 뒤에 합격 발표 이메일을 받았다.

내일배움카드로 K-Digital 역량 지원을 받기 때문에 수업 시작하기 전까지 HRD-NET에 이것저것 등록하고 승인받는 절차가 필요했다.

 

그리고 1일차...!


2024/06/10

1일차 OT


신세계I&C에서 진행하는 JAVA 기반 백엔드 개발자 양성과정이 시작되었다. 6월 10일 부터 12월 9일까지 6개월의 교육 기간을 가진다. 강의실에 도착하니 반겨주는 환영 인사가 있었다.

 

강의실에 도착해서 출석체크를 하고 OT를 들었다.

난 4기생인데 2기와 3기가 다른 방에서 교육을 받고 있었다.

 

↓ 가장 중요한 출결 관리↓

  • 120일 기간 중 80%이상 출결 시 수료
  • 4시간부터 결석 처리 (2시까지는 입실)
  • 지각, 조퇴, 외출 누적 3회 당 1일 결석

↓훈련장려금↓

  • 한 달(10일 ~ 다음달 9일) 21일 중 최소 80%를 출석 시 하루 만오천원씩 훈련장려금 지급
  • 79% 출석율이면 0원

 

기본적인 OT가 끝난 후 서유미 강사님께서 들어오셔서 앞으로 하게 될 커리큘럼과 팀 프로젝트에 대해 말씀하셨다. 2개의 미니 프로젝트와 1개의 프로젝트를 팀원과 수행하게 되고 파이널 팀 프로젝트는 신세계 아이앤씨에 근무 중인 현직 개발자분이 멘토가 되어준다고 하셨다.

점심은 서브웨이 샌드위치와 쿠키, 콜라를 제공해주셨다..!

오후에는 아이스브레이킹 시간을 가졌다. 조끼리 게임하고 DISC 성격 검사를 했는데 신중형과 주도형이 높게 나왔는데 이 둘이 높으면 창의성과 연관되어 있다고 한다.

 

 


2024/06/11

2일차 협업 툴 특강 - 우재남 교수님


 

2일차는 우재남 교수님이 오셔서 깃과 깃허브 강의를 해주셨다. 깃/깃허브의 기초를 배우고 소스트리로 연동해보았다. 코드의 형상 관리가 가능해지며 유지 보수를 용이하게 할 수 있고 외부 서버에 저장함으로써 안전성을 높일 수 있기 때문에 협업에 있어 반드시 필요한 툴이라고 느꼈다.

 

 

 


2024/06/12

자바베이직 1일차 - 자바플랫폼 환경설정


드디어 프로그래밍 수업 첫 날 스타트!

자바에 대해서 배우고 JDK, IntelliJ를 설치하고 간단한 코딩을 한 날이다. 오전에는 미니프로젝트하기 전까지 진행하는 스터디 팀빌딩을 했다. 스터디를 통해서 더 깊은 자바 개념과 알고리즘 실력을 쌓고 싶다.

그리고 아래는 어제 수업 듣고 궁금해져서 더 찾아본 것.

 

JVM, JRE, JDK의 차이점과 특징

https://youtu.be/VvVruEDCSSY?si=RhTOE9HxM_EgOGZT

JVM은 자바 버추얼 머신의 약자로 .java 파일 (프로그래머의 코드)를 컴파일해서 바이트코드로 변환한 .class를 JVM이 기계어로 통역한다. 자바로 짜서 컴파일한 소프트웨어들이 JVM이 설치된 어떤 종류의 컴퓨터에서든 돌 수 있게 해준다. JVM은 다양한 작업을 수행하는데 그 중 하나가 메모리 관리이다.

 

이 JVM을 포함하면서 여러 기능들을 미리 구현한 라이브러리를 포함하고 있는 것이 JRE 이다. 자바 런타임 환경의 약자로 컴파일과 빌드가 된 다음 실행이 될때 그 환경 요소들로서 필요한 것들이다. JRE가 있기 때문에 list, set 등 여러 라이브러리를 직접 구현할 필요없이 사용할 수 있다.

 

이 JRE를 포함하면서 javac, jdb, jar 같은 명령어와 기능을 포함하는 것이 JDK 이다. Oracle JDK, OpenJDK, Zulu, Corretto 등이 있다.

 

JVM이 수행하는 작업

  • 바이트코드 실행: JVM은 자바 컴파일러에 의해 생성된 바이트코드를 실행합니다. 이는 자바의 플랫폼 독립성을 제공하며, 서로 다른 운영체제 및 하드웨어에서 동일한 자바 프로그램이 실행될 수 있도록 합니다.
  • 메모리 관리: JVM은 힙(heap) 및 스택(stack) 메모리를 관리합니다. 힙 메모리는 객체 및 배열을 저장하고, 스택 메모리는 메소드 호출 및 지역 변수를 저장합니다. 이를 통해 메모리 할당 및 해제, 가비지 컬렉션 등의 작업이 이루어집니다.
  • 가비지 컬렉션: JVM은 더 이상 사용되지 않는 객체들을 자동으로 탐지하고 제거하는 가비지 컬렉션을 수행합니다. 이는 프로그래머가 명시적으로 메모리를 해제할 필요 없이 메모리 누수를 방지하고 프로그램의 안정성을 유지하는 데 도움이 됩니다.
  • 스레드 관리: JVM은 멀티스레드 프로그램을 실행하고 스레드 간의 스케줄링을 관리합니다. 이를 통해 동시성(concurrency)을 지원하고 병렬 처리를 효율적으로 수행할 수 있습니다.
  • 예외 처리: JVM은 자바 프로그램에서 발생하는 예외를 적절하게 처리하고 처리되지 않은 예외를 적절하게 보고합니다. 이를 통해 프로그램의 안정성을 높이고 예기치 않은 오류로부터 프로그램을 보호합니다.
  • 동적 로딩: JVM은 필요할 때 클래스 파일을 동적으로 로드하고 초기화합니다. 이를 통해 자바 애플리케이션이 런타임 중에 새로운 클래스를 동적으로 추가하거나 변경할 수 있습니다.

LTS 란 ?

 

JVM의 실행 순서

 

1. 클래스 로딩 (Class Loading)

JVM이 프로그램 실행을 시작하면, 필요한 클래스를 로드합니다.

    • 클래스 로더 서브시스템: .class 파일을 찾아 메모리에 로드합니다. 기본적으로 Bootstrap ClassLoader, Extension ClassLoader, 그리고 Application ClassLoader가 있습니다. 각 로더는 특정 경로에서 클래스를 찾습니다.
    • 로드 순서: JVM은 가장 먼저 메인 클래스 (public static void main(String[] args))를 로드합니다.

2. 링크 (Linking)

로드된 클래스 파일을 실행할 수 있도록 준비하는 과정입니다.

    • 검증 (Verification): 로드된 바이트코드가 적절하고 유효한지 확인합니다. 이 단계에서 코드가 유효하지 않으면 VerifyError가 발생합니다.
    • 준비 (Preparation): 클래스에 정의된 정적 변수들을 메모리에 할당하고 초기 기본값을 설정합니다.
    • 해결 (Resolution): 심볼릭 레퍼런스(예: 클래스, 메서드, 필드)를 실제 메모리 주소로 변환합니다.

3. 초기화 (Initialization)

클래스 변수와 클래스 초기화 블록을 실행합니다.

    • 정적 변수 초기화: 정적 변수에 대한 사용자 정의 초기화 코드가 실행됩니다.
    • 클래스 초기화 블록: static { } 블록이 있는 경우 이 블록이 실행됩니다.

4. 실행 (Execution)

클래스의 main 메서드를 호출하여 프로그램이 실행됩니다.

    • JIT 컴파일러 (Just-In-Time Compiler): 실행 중 JVM은 자주 사용되는 바이트코드를 기계어로 컴파일하여 실행 속도를 높입니다.
    • 인터프리터 (Interpreter): 바이트코드를 한 줄씩 해석하여 실행합니다. JIT 컴파일러가 성능을 향상시키기 전까지 초기 실행 시 인터프리터가 사용됩니다.

5. 메모리 관리 (Memory Management)

JVM은 프로그램 실행 중 메모리 관리를 담당합니다.

    • 힙 (Heap): 모든 객체와 배열이 할당되는 메모리 영역입니다.
    • 스택 (Stack): 각 스레드마다 생성되는 메모리 영역으로, 메서드 호출 시 프레임을 저장합니다.
    • 메소드 영역 (Method Area): 클래스 데이터 (필드, 메서드, 정적 변수 등)를 저장합니다.
    • PC 레지스터 (Program Counter Register): 각 스레드마다 현재 실행 중인 JVM 명령의 주소를 저장합니다.
    • 네이티브 메소드 스택 (Native Method Stack): 네이티브 메서드를 실행하기 위해 사용되는 스택입니다.

6. 가비지 컬렉션 (Garbage Collection)

JVM은 더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제하여 메모리를 관리합니다.

    • 마크 앤 스위프 (Mark and Sweep): 사용되지 않는 객체를 찾아 해제합니다.
    • 참조 카운팅 (Reference Counting): 각 객체에 대한 참조 수를 계산하여 참조 수가 0이 되면 객체를 해제합니다.

 

 

 

 

2024/06/13

자바베이직 2일차 - 기초프로그래밍


자바베이직 2일차에는 변수 타입과 데이터타입을 알아보았다. 객체지향 프로그램에서 각 변수들을 생성하고 활용하는 방법을 배웠고 유니코드, 2진수, 8진수, 16진수 리터럴에 대해 배워보았다.

인텔리제이 환경에서 개발을 하면서 도움이 되는 여러 플러그인을 찾아 설치해보았다. 특히 GitToolBox 와 같은 라이브러리를 사용하면 깃에 자동으로 연동되어 소스트리나 깃 커맨드 창을 열지 않고도 인텔리제이에서 코드를 관리할 수 있어 매우 편리하다고 느꼈다. 그 외에도 편리한 개발을 위해 필수적인 라이브러리들을 설치하고 적용하는 시간을 가졌다. 이전에는 플러그인 활용하지 못했는데,  앞으로는 필요한 라이브러리를 적극적으로 탐색하고, 현업에서 효율적이고 편리한 개발 환경을 구축해야겠다는 생각을 하게 되었다. 그리고 플러그인과 같이 이미 존재하는 프로그램을 내 것에 설치하여 사용하는 것처럼, 개발도 동일하게 이미 존재하는 라이브러리를 가지고 응용해서 만들어나가는 것이며, 앞으로 내가 할 개발도 오픈API 형식을 지향해야 한다는 것도 새롭게 배울 수 있었다.

 

 


2024/06/14

자바베이직 3일차 - 기초프로그래밍


오전에는 어제 낸 연산자 과제의 코드리뷰하는 시간을 가졌다. 다른 학생이 푼 코드를 보면서 내가 쓴 코드와 비교해보았다. BufferedReader 클래스를 사용하여 문제의 입출력 예제를 그대로 구현한 코드가 인상 깊었다. 2일차에 이어 데이터 타입을 배웠으며 String과 형변환(자동 형변환, 강제 형변환)을 배웠다.

 

미니프로젝트 시작하기 전까지 진행할 스터디그룹의 조장이 되었는데 모든 팀원의 니즈에 맞는 스터디 방법을 찾기 위해  많이 고민했다. 수업과 코테 두 가지를 융합해서 공부할 방법을 생각해서 팀원들에게 보여줬는데 모두 찬성해주었다..! 스터디 방향성을 잡을 수 있어서 다행이었다. 모두에게 도움이 되는 스터디가 되었으면 한다!