🏁 시작

4학년 2학기를 마치고 졸업을 앞두고, 여러 부트캠프를 지원하다가 우리 FIS 아카데미 클라우드 엔지니어링 과정에 합격했다! 앞으로 매 주차마다 학습한 내용과 회고를 작성할 예정이다.

커리큘럼

출처: 우리 FIS 아카데미 홈페이지 https://woorifisa.com/

백엔드 개발자 취업을 희망하고 있던 와중에, 도커와 쿠버네티스가 궁금해졌고 새로운 기술을 공부하고 싶어서 클라우드 엔지니어링 과정을 지원하게 되었다.
앞으로 5개월간 오전 9시부터 오후 6시까지 혹독한(?) 교육 과정을 수강할 예정이다...


📚 학습 정리

JAVA

1주차 교육 과정의 한 축은 자바였다. 아무래도 교육 과정의 마지막 부분에 프로젝트를 진행하기 때문이었을까, 자바 스프링 기반의 백엔드 개발을 위해 자바에 대한 학습이 진행되었다.

IDE

자바 개발을 위한 IDE로 Spring Tool Suite, 줄여서 STS 라고 부르는 툴을 사용하였다. 이클립스 기반 스프링 애플리케이션을 개발 하기 위한 개발 환경이라고 한다.

맨날 인텔리제이만 사용하다가 정말 오랜만에 이클립스를 사용해 보니 역체감이 엄청났다. 스마트폰을 사용하다가 피쳐폰으로 다시 돌아간 느낌이랄까..

대학교 1학년 때 메모장으로 코딩을 시키던 자바 교수님이 생각났다. 기술의 편리함에 너무 익숙해졌던 나를 다시 되돌아보게 하는 그런 툴이다.

Maven

항상 빌드 툴로 gradle을 사용했던 나에게는 Maven은 새로웠다. 여러 라이브러리를 사용할 수 있으려면 이 Maven이 제공하는 pom.xml에 dependency를 추가하면 된다.


처음 Maven 프로젝트를 생성하고 기본적으로 제공되는 pom.xml에는 오류가 있다.
xml namespace의 모든 http:// 로 시작하는 url을 https:// 로 변경해줘야 정상으로 작동한다.

강의장에서는 개인 노트북으로 LG 그램을 제공하지만 나는 기존에 쓰던 맥북을 사용하였다. STS를 설치하고 강의에서 설명한 대로 의존성을 추가했지만 전혀 동작하지 않았다.


빨간 줄이 생성될 때마다 마우스를 올려보고 문제를 해결하려 노력한 결과
일단 module-info.java에 내용을 기록하면 정상적으로 라이브러리를 사용할 수 있다는 것을 깨달았다.
그 이유와 정확한 방법은 더 찾아봐야 알 것 같다.

Linux

1주차 과정의 다른 축은 리눅스 개발이었다.
리눅스 설치와 명령어, 여러 툴들에 대해 배웠다.

환경 설정

우선 윈도우 상에서 리눅스를 사용하기 위해 VirtualBox 를 설치하고, 그 위에 Ubuntu 22.04 LTS 를 설치하였다.
우분투도 데스크탑 버전이 아니라 명령어로 동작하는 서버 버전을 설치하였다.
이후 SSH 연결을 위해 MobaXterm 을 설치하는 과정을 학습하였다.

하지만 MobaXterm은 윈도우 버전만 존재하였고, Mac에서는 기본 터미널로 리눅스에 연결하는 것이 가능했기 때문에 필자는 다른 방식을 채택하였다.
Linux 설치를 위한 가상환경으로는 UTM 을 사용하였고, 기본 터미널로 쉽게 연결이 가능하였다.

포트포워딩

  • 맥에서 작업 시
ssh 계정@접속할서버 -p 포트 -L 로컬에서사용할포트:대상서버정보:포트
예) ssh username@127.0.0.1 -p 22 -L 3306:localhost:3306
  • 윈도우: MobaXterm → 설정 → 네트워크 → 고급 → 포트포워딩

명령어

  • ls : 현재 디렉토리의 파일 및 폴더 정보 표시
$ ls -al (-arlst) 등의 옵션으로 상세 정보 확인 가능.
권한 및 디렉토리 유무 파악 가능.
drwxr-x---: 디렉토리, read와 execute 권한
-rw------- : 파일, read와 write 권한
  • tree : 디렉토리 형태를 한 눈에 보기 쉽게 표현
  • mv : 파일 이동
 mv fisa2.txt fisa: fisa2.txt 파일을 fisa 폴더로 옮기기
  • mkdir : 디렉토리 생성
  • cd : 현재 작업 환경 이동
  • whoami : 현재 유저 이름 출력
  • history : 명령어 기록 출력
  • ifconfig : ip 정보 출력. 윈도우에서는 ipconfig
  • clear : 콘솔 창 초기화

Lombok

불필요한 코드를 줄일 수 있는 라이브러리.
어노테이션 기반의 코딩을 가능하게 해 준다.

주요 기능

  1. Getter, Setter 자동 생성
  2. 생성자 자동 생성
  3. Builder 패턴 지원

활용

생성자, Getter, Setter를 입력하지 않아도 된다.

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
public class Customer {
	public String id;
	public String pw;
	public int age;
	public String grade;	
}
  • @NoArgsConstructor : 매개변수가 없는 기본 생성자를 만듦.
  • @AllArgsConstructor : 모든 필드 변수를 파라미터로 받아 초기화하는 생성자를 만듦.
  • @Getter, @Setter : Getter, Setter 메서드 생성
  • @RequiredArgsConstructor : final이 붙거나 @NonNull 이 붙은 필드의 생성자를 만듦.
  • @ToString : toString() 메서드 생성

어노테이션

  • @ 로 시작하는 java문법을 어노테이션이라고 한다.
  1. 표현: @(At)
  2. 기능: 고유한 이름 별 기능
  3. jdk1.5버전부터 활성화, 프레임워크들 주도적인 설정

Builder 패턴

객체의 생성 과정을 단순화하고 유연하게 하기 위한 디자인 패턴.

  • 객체의 생성 과정을 여러 단계로 나누어 다양한 옵션 제공, 불변 객체 생성.

@Builder 어노테이션

빌더 패턴을 적용할 수 있도록 빌더 클래스를 생성한다.

import lombok.Builder;
import lombok.Getter;
import lombok.ToString;

@Getter
@ToString
@Builder
public class Person {
    private final String name;
    private final int age;
    private final String address;
}
public class Main {
    public static void main(String[] args) {
        Person person = Person.builder()
                              .name("Park")
                              .age(15)
                              .address("서울")
                              .build();

        System.out.println(person);
    }
}
  • .name().age().address() 와 같이 연속적으로 사용 가능
  • 원하는 필드 변수를 초기화해서 사용할 수 있도록 함.

String 객체

자바에서 문자열을 다루는 클래스는 String 클래스이다.
이는 int, byte 등과 같은 primitive type과는 다르게 객체로 취급된다.
이미 생성된 String 객체의 메모리 데이터는 업데이트가 불가하다. 즉, 무조건 메모리에 새로 생성된다는 뜻이다.

  • StringBuilder, StringBuffer는 이미 생성된 메모리의 문자열 데이터를 업데이트 할 수 있다는 차이점이 있다.

배열

하나의 변수로 다수의 데이터를 관리하는 자료구조

  • 데이터 구분: 고유한 index
    • index는 0부터 시작
  • 모든 배열은 객체 (heap 영역에 적재)

배열 생성 문법: int[] i = {값1, 값2, ...}

변수 선언 위치

  1. class {} (body) : 멤버 변수 , 객체 생성시 heap 영역 내부에 생성
  2. 생성자 Parameter: 생성자 실행 중에만 사용 가능한 로컬 변수
  3. 생성자 {}: 생성자 실행 중에만 사용 가능한 로컬 변수
  4. 메서드 Parameter: 메서드 실행 중에만 사용 가능한 로컬 변수
  5. 메서드 {}: 메서드 실행 중에만 사용 가능한 로컬 변수

멤버 변수 : Heap에 생성된 값에 한해서만 기본 값으로 자동 초기화

데이터 타입초기화 값
정수0
실수0.0
booleanfalse
char'u0000'
참조null

로컬 변수 : 자동 초기화 되지 않음, 선언 시 초기화 권장

배열 초기화

배열은 로컬 변수이지만 값을 각 index 별로 초기화하지 않아도 자동으로 초기화가 기본적으로 진행된다.

  • heap 영역에 생성되기 때문.

MVC 패턴

  • Model: 핵심/비즈니스 로직(biz)/ 코어 기술
  • View: Presentation
  • Controller: View와 Model을 연결

프로젝트

미니 프로젝트 주소 : https://github.com/jiione/step04_miniProject

1주차 마지막 날에는 배운 내용을 토대로 미니 프로젝트를 진행하였다.
주제는 콘솔로 동작하는 도서관 및 유저 관리 서비스이다.

builder 패턴을 사용한 모습.

프로젝트 구조, MVC 패턴을 적용하려고 노력했다.


📔 1주차 회고

🕘 회사원의 시간표

항상 방학만 되면 새벽 3~4시 취침 - 오후 1시 기상 생활 패턴을 유지하던 나에게 9시 출근 ~ 18시 퇴근이라는 회사원의 시간표는 매우 혹독하다고 생각하였다. 실제로 몸이 엄청 피곤했고, 퇴근하고 기절할 때도 있었다.

하지만 같은 조가 된 다른 분은 집이 하남이었고, 5시 반에 기상해서 편도로 2시간 정도 거리를 왔다갔다 하시는 걸 보고 힘들다고 생각했던 내가 부끄러워졌다.

또한 강사님의 체력에 감탄하였다. 9시부터 6시까지 수업을 쭉 진행하시고 말을 계속 하셔야 했는데 정말 쉽지 않은 일이라고 생각했다.

세상에는 정말 열심히 사는 사람이 많다고 느낀 1주차였다.

👋 대면수업, 매우 만족!

다른 부트캠프보다 우리FISA를 택한 이유는 100% 대면 수업이라는 장점이 있기 때문이었다.

비대면 수업을 겪었던 경험을 비추어 보았을 때 개인적으로 아쉬운 점이 많았다.

  • 힘들 때 내 자신이 나태해지는 것
  • 모르는 것이 있을 때 옆사람에게 질문하지 못하는 것.
  • 혼자 외로운 공부를 해야 한다는 점

반면 대면 수업의 장점은?

  • 같은 교육과정을 듣는 다른 분들과 네트워킹, 교류, 만남
  • 몰랐던 새로운 지식(개발 뿐만이 아닌)에 대한 공유
  • 혼밥 X
  • 힘들 때 동기부여 받기
  • 강사님이 수업 외적으로 해주시는 이런저런 이야기 (듣는 재미가 있다)

이러한 이유로 대면 수업을 선호하곤 했다.

추가적으로 교육장이 매우 쾌적하다. 더운 여름철이지만 에어컨을 정말 빵빵하게 틀어줘서 너무 시원하다.
교육장의 위치 또한 회사원들이 많은 상암이라 주변 맛집을 탐방하는 재미도 있다.
점심시간에 주변을 돌아다니면 회사원들이 많은 풍경인 것이 신기했다.

❓ 퀴즈 & 미니 프로젝트

종종 각 조별로 배운 내용에 대한 퀴즈를 내어 서로 맞춰보게 하는 시간을 가졌다.
같은 내용을 공부해도 서로 다른 문제를 낸다는 점이 흥미로웠고, 서로의 문제를 맞추는 것과 동시에 문제에 대한 피드백을 주고받으며 놓쳤던 부분에 대해 이야기를 나누는 것이 재미있었다.

금요일에는 배운 내용을 토대로 미니 프로젝트를 진행하였다.
Git을 오랜만에 써서 충돌이 나는 일이 비일비재했고 머리가 아프기도 했지만,
오랜만에 해커톤을 하는 느낌을 받아 재미있었다.

같은 조원 분들이 다들 열심히 하셔서 좋은 결과를 낼 수 있었고, 배운 내용을 복습하고 체화시키는 데는 직접 무언가 만들어보는 것이 최고라는 것을 깨달았다.

다른 분들도 꽤나 퀄리티 있는 결과물을 몇 시간 만에 내는 것을 보고 놀랍다고 생각했다.
앞으로 더 열심히 해야겠다는 생각뿐이다.

0개의 댓글