개발자로서 첫 발을 딛게 된 교육이기 때문에 교육과정에 입과하기 전부터 많은 친구, 인터넷, 친적 등 다방면으로 어디서 어떻게 시작하면 좋을지 알아보았다. 그렇게 결정하고 입과하게 된 곳이 쌍용교육센터였다. 대학교 때, 공대생이었기 때문에 C언어 수업을 들었던 나는 자신이 있었다. 그러나 java는 초반에는 쉬었으나 갈수록 어려워지는 것이 느껴졌다. 그래서 교육 초반에 마음이 맞는 사람들을 모아 매일 같이 줌으로 수업을 리뷰하는 스터디를 진행했다. 돌이켜보면 이 스터디가 나에게 큰 도움이 된거 같다. 스터디원이라는 좋은 사람들도 얻게 되었고, 기본기를 더 충실하게 다질 수 있었기 때문이다. 그 이후로 시간이 참 빨리 지나간 것 같다. 새로운 것을 배울 때마다 정신이 없었고, 내 자신이 잘하고 있는가에 대한 불안감도 있었다. 지금 와서 생각해보면 내 생각이지만 열심히 잘 해오고 있는 것 같다.
아쉬웠던 점은 코로나로 인해 수업이 비대면인 기간이 대부분이었다는 것이다. 비대면으로 수업을 하여 집중력도 떨어졌고, 팀원들과 프로젝트를 진행함에 있어서 불편한 점이 많았다. 핑계이지만 코로나 시기가 아니었다면 더 열심히 할 수 있었을 것 같다.
학원 입과 전에 면접을 봤는데 그 때, 이런 질문을 받았었다.
"기존에 회사는 공채로 입사했는데 후회는 없으신가요?"
그 질문을 듣고 나는 속으로 웃음이 났다. 전혀 후회가 없었기 때문이다. 오히려 개발을 배우는 것에 대한 설렘으로 가득했던 것 같다. 그 때의 그 감정을 앞으로도 잊지 않고 가져가려고 한다.
대학교를 졸업하자마자 운이 좋게 바로 취업이 되어 사회 생활을 시작하였다. 사실 반도체 직군 쪽으로만 생각하고 준비하였던 나였기에 의료장비 엔지니어가 되는 것은 조금 낯선 일이었다. 회사의 규모가 조금 있었고, 연봉 부분이 당시의 나를 다녀보게 만들었지 않나 싶다. 의료쪽으로는 모르는 부분이 많았지만 점차 배워가며 자신감을 얻었다. 회사 사람들과 소통하는 법을 배웠고, 고객사인 병원 사람들을 어떻게 대해야하는지도 배웠다. 1년 정도의 시간이 지나며 스스로 잘하고 있다는 자신감을 얻었다.
엔지니어로 일하면서 의료장비에 대한 지식뿐만 아니라, 일상 생활에 대한 지혜도 많이 배웠다. 어떠한 것이 고장났을 때, 고치고 해결할 수 있는 능력을 가지게 되었고, 실제로 친구집 로봇 청소기의 고장난 센서를 교체해 고쳐 주기도 하였다.
그러나 평생 직장으로 삼을 일은 아니라고 판단했다. 1년 반이 지난 사원이었던 스스로가 발전하고 있지 못하고 있다고 판단하였고, 내가 진짜 하고 싶은 일이 무엇인지 곰곰이 생각해보았다. 나는 설계나 개발처럼 무언가를 만드는 것을 원하던 학생이었다는 것이 떠올랐고, 생각한 것을 코드를 통해 구현하는 개발에 매력을 느껴 퇴사를 하고 지금의 선택을 하였다.
학원에서 교육을 듣던 중간 쯤 지나가는 말로 친구 eva에게 생일 선무롤 간단한 페이지를 만들어 주겠다는 약속(?)을 지키기 위해 이지업 강의 - 포토그램 만들기를 토대로 만들은 cheolstagram을 evastagram으로 바꾸어서 aws를 이용해 생일글을 전달해 주려고 배포하면서 기록을 남긴다.
AWS 사이트에 들어가서 로그인을 한다. 아이디가 없다면 회원가입을 해야하는데 회원가입 과정에서 신용카드가 필요하다. 회원가입 과정에서 1달러가 결제됐다가 취소되기도(?) 한다.(가입한지는 오래돼서 정확히는 기억이 안난다.)
로그인을 하면 아래와 같은 화면이다.
여기서 왼쪽 상단의 서비스 → 모든 서비스 → EC2로 들어가준다.
주황색 인스턴스 시작 버튼을 눌러 인스턴스를 생성한다.
맨 위에 Amazon Linux 2 AMI (HVM), SSD Volume Type 을 선택한다.
Amazon Linux를 사용하는 이유는 아마존이 개발하고 있기 때문에 서비스와의 연동이 쉽고 yum이 빠르다.
🏀 ANDONE - yum이란 Yellow dog Update라고도 하고 Duke University에서 RPM 설치를 개선하기 위해 개발한 패키지 관리자이다.
배포 연습을 하는 것이기에 프리티어로 선택한다. 프리티어는 기간 1년동안 무상으로 사용할 수 있다.
다음: 인스턴스 세부 정보 구성 클릭.
여기선 설정할 것이 없다.
다음: 스토리지 추가
처음 들어가면 스토리지 크기가 기본 8(?)로 되어있는데 프리티어는 30GB까지 무료이므로 우리는 사용할 수 있는 최대로 사용해주자. 30으로 크기 변경 후 다음: 태그 추가.
여기서는 태그 추가를 클릭하여 키는 name으로 하고 값은 인스턴스 이름으로 지정하고 싶은 것으로 작성한다.
다음: 보안 그룹 구성
보안 그룹을 구성해야하는데 여기서 지정된 포트번호로 기본적인 통신을 하기 때문에 잘 해야한다.
방화벽의 기본요소는 다음과 같다.
Inbound: 외부에서 EC2 인스턴스로 들어오는 트래픽입니다. 대표적인 것들로는 HTTP, HTTPS, SSH, RDP 등이 있습니다.
Outbound: EC2 인스턴스에서 외부로 나가는 트래픽입니다. EC2 인스턴스 안에서 인터넷을 사용할 경우 Outbound라 할 수 있습니다. 대표적으로 파일을 다운로드하거나, 외부 SSH로 접속하는 것 등이 있습니다.
Type: 프토토콜 형태입니다. 프로토콜은 크게 TCP, UDP, ICMP로 나눌 수 있습니다.
Port, Port Range: 포트 번호입니다. TCP, UDP 프로토콜은 0~65535 사이의 포트 번호를 사용하게 됩니다(ICMP는 포트 번호를 사용하지 않습니다). 우리가 익히 알고 있는 HTTP는 80번 SSH는 22번처럼 각 서버 애플리케이션들은 고유의 포트 번호를 사용하고 있습니다.
Source/Destination: 연결 혹은 접속 가능한 IP 대역을 뜻합니다. Inbound 일 경우 Source, Outbound일 경우 Destination이라 부릅니다. IP 주소 하나만 지정할 수도 있고 CIDR 표기 방법을 이용하여 일정한 대역을 설정할 수 있습니다.
Rule: 지금까지 설명한 Inbound, Outbound, Type, Port, Source/Destination을 조합한 것을 Rule(규칙)이라고 합니다.
SSH에는 소스에 내 IP로 선택하면 오른쪽에 ip가 자동으로 적용된다.(추후에 인스턴스에 SSH로 접속할 ip)
규칙을 추가하여 HTTPS, 사용자 지정 TCP(8080 - Tomcat) 포트를 열어주자. 추후에 db를 위해 더 추가할 것
이제 모든 설정이 끝났다. 검토 및 시작을 눌러준다.
내용을 한번 더 검토해주고 시작하기를 누른다.
시작하기를 누르면 키페어 생성하는 창이 뜬다.
새 키 페어 생성을 선택한 후 키 페어의 이름을 입력해주고, 키 페어 다운로드를 본인이 기억하는 위치로 꼭 저장해둔다!!!!
추후에 SSH로 ec2 인스턴스에 접속할 때도 사용.
인스턴스가 생성된 화면이다. 인스턴스 보기를 눌러보자.
아래쪽에 새로운 인스턴스가 생성된 것을 볼 수 있다. (위에 것은 기존에 사용하던 인스턴스이니 무시하자.)
이제 EC2의 서버를 고정 IP로 사용하기 위해서 탄력적 IP를 생성해야 한다. 탄력적 ip를 사용하지 않으면 ec2 인스턴스를 재시작 할 때 마다 IP가 변경되어 번거로운 경우가 발생한다.
왼쪽 메뉴바에서 >네트워크 및 보안 >탄력적 IP를 클릭.
오른쪽 위에 탄력적 IP 주소 할당 클릭.
할당 클릭하면 바로 탄력적 IP 주소가 할당된다. 필자는 이미 받은 IP주소가 있어서 할당하진 않겠다.(알기로는 한개까지 무료이다.) 그리고 여기서 중요한 것은 생성된 탄력적 IP 주소를 인스턴스와 바로 연결해주어야 한다는 것이다. 그렇지 않으면 요금이 나가는 것으로 알고 있다. 그러므로 바로 연결해주자.
해당 IP 선택 후 작업 > 탄력적 IP 주소 연결 클릭
인스턴스를 선택해주고, 프라이빗 IP 주소를 선택해 준 후 연결 클릭.
탄력적 IP 주소에서 IP 주소에 연결된 인스턴스 ID를 확인할 수 있다.
인스턴스를 확인해보면 탄력적 IP가 지정된 것을 확인할 수 있다. (위의 인스턴스 확인 - 필자 기존 사용하던 것)
그럼 이제 EC2 인스턴스에 터미널로 접속을 해보자.
ssh ~i /경로/pem키파일명 ec2-user@인스턴스ip주소
# 인스턴스 ip 주소는 할당받은 탄력적 ip 주소
묻는 질문에 yes로 대답하면 EC2에 성공적으로 접속된다.
(Permisson denied 메세지가 뜨며 접속이 거부되는 경우가 있는데 이는 아까 받은 pem키 권한의 문제이다. 다음과 같이 권한을 변경해주면된다.)
@GetMapping("/resp/json/object")public String respJsonObject(){
User user = new User();
user.setUsername("Junfe");
String data = "{\"username\":\""+user.getUsername()+"\"}";
return data;
}
user 객체를 생성해서 그 안에 "Junfe"라는 내용을 담는다.
그리고 data라는 String 형을 선언해서 json 형식으로 작성해준다.
실제 개발하면서 절대로 이렇게 사용하진 않는다. data에 들어가는 저 내용을 직접 작성하는 것은 정말 힘든 일일 것이다.....
3. MessageConverter 가 자동으로 java object를 json 형태로 변환
@GetMapping("/resp/json/javaobject")public User respJsonJavaObject(){
User user = new User();
user.setUsername("Junfe");
return user;
// 1. MessageConverter 가 자동으로 JavaObject를 Json으로 변경해서 통신을 통해 응답을 해준다. // 2. @RestController 일때만 MessageConverter가 작동한다.
}
여기서는 객체 자체를 반환한다. 그러면 MessageConverter가 자동으로 JavaObject를 Json으로 변경해준다.
이 때, 주의할 점은 controller가 @RestController 여야 한다는 것이다.