스프링 부트 OAuth 구현을 하다가 순환참조 이슈가 발생하였다. 이 순환참조 이슈는 Spring Boot 2.6x 버전부터 발생한다고 한다. 앞으로 프로젝트 할 때 흔히 겪을 수 있는 문제라 일단 기록은 해두려 한다.

 

  • 문제에러 화면
    • 대충 circular references 어쩌고 나오면 순환참조 이슈이다. 

문제화면

  • 문제가 발생되는 코드

코드1
코드2

  • SecurityConfig를 빈으로 등록하려 하니 PrincipalOauth2UserService가 빈으로 사전에 등록되어야 주입이 가능하고 PrincipalOauth2UserService를 빈으로 등록하려 하니 BCryptPasswordEncoder가 미리 빈으로 등록되어서 주입을 해야 하는데 이도저도 안되니 결국 어떠한 빈도 생성하지 못한다. 

 

  • 해결책
    • 순환의 고리를 끊자.
      • 다른 Config 클래스에 빈으로 등록하기 
      • BCryptPasswordEncoder를 상속받는 클래스를 만들고 @Component로 빈으로 등록하기 
  • 본인은 두번째 방법으로 해결하였다. 

상속이즈굳

 

Docker란?

  • 하이퍼바이저(hypervisor) 없이 리눅스 컨테이너(Linux Container, LXC)기술을 바탕으로 애플리케이션을 격리된 상태에서 실행하는 가상화 솔루션
  • 플랫폼에 상관 없이 실행될 수 있는 어플리케이션 컨테이너를 만드는 기술

[ 도커의 주요 특징 ]

특징 설명
공유 * 하이퍼바이저처럼 애플리케이션 각각에 운영체제를 제공하는 것이 아니라 호스트의 운영체제를 공유하는 방식
격리 * 애플리케이션이나 프로세스가 해당 컨테이너 안에서 샌드박스 처리되어 외부 요인에 영향 받는 일 없이 안전하게 구동

[ 도커와 하이퍼바이저의 비교 ]

도커 하이퍼바이저
* 호스트 운영체제 공유와 어플리케이션 격리 * 호스트 컴퓨터 운영체제 상에서 다수의 운영체제를 가상화
  • 하이퍼바이저는 호스트OS와 하이퍼바이저 위에 Guest OS와 응용 어플리케이션들이 설치되어 있다.
  • 도커는 하이퍼바이저 없이 도커 엔진 기반으로 호스트 OS를 공유하며 App(실행하고자 하는 프로그램), Bin/Library( 프로그램이 실행하는데 필요한 환경과 관련된 파일)을 격리시켜서 쓴다.

 

[ 컨테이너의 역사 ]

원래는 화물을 트럭으로 부두까지 실어온 후 선박에 도착하면 다른 화물들과 함께 배의 측면으로 옮겨 부두노동자가 포장해서 적재했는데 이러한 적재시간이 오래 걸려서 말콤이라는 사람이 컨테이너가 발명한다. 컨테이너 박스만을 분리하여 통으로 배에 싣는 방식으로 적재함으로써 적재 비용을 절감시켰다.

 

화물 컨테이너의 내부 화물은 운송에 중요하지 않는다. 세계의 모든 선박과 트럭과 크레인이 컨테이너 규격에 적합해야 한다. 마찬가지로 도커 컨테이너도 어떤 애플리케이션(관련 파일, 프레임워크, 의존성 등) 내부에 있는지 중요하지 않다. 컨테이너는 모든 리눅스 배포판에서 실행되며, 아마존 AWS, Microsoft Azure, Google Cloud Platform, Rackplace 등 모든 퍼블릭 클라우드 환경에서 운영된다. 

 

우리가 해외로 이사간다면 컨테이너에 이삿짐을 넣어서 이동한 뒤 배에 실어서 운송하게 될 것이다. 이와 같은 개념으로 개발자가 로컬 시스템에 개발한 것을 테스트하고 어플리케이션에 Push 할 수 있다. 이 부분을 모두 도커와 컨테이너를 활용해서 배포를 하면 시스템 환경을 그대로 물리서버 혹은 가상화, 클라우드와 같이 상이한 환경에서도 배포하고 운영할 수 있게 된다. 이것이 바로 기존의 가상화와 같이 밴더 종속성 없이 리눅스의 기본 기능만으로 손쉽게 컨테이너 환경을 구축하는 것이다. 

 

[ 도커의 구성 요소 ]

구성요소 설명
이미지 * 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 파일로 만드는 것
컨테이너 * 이미지를 실행한 상태
* 여러 개의 애플리케이션을 단일 호스트에서 구동하기 위한 개념
LXC(Linux Container) * LXC로 만든 컨테이너는 고유의 파일시스템, 프로세스, 네트워크 공간을 가짐.
* 마치 가상머신처럼 독립적이고 격리된 공간
도커 엔진 * 사용자가 컨테이너를 생성하고 사용할 수 있도록 함
도커 허브 * SaaS 기반의 서비스로 도커 서비스를 생성하고 공유할 수 있도록 함

[ 도커의 상태와 명령어 ]

도커의 상태와 명령어

도커 이미지를 처음에 create를 해서 만들 수 있고 기존에 있는 이미지나 SaaS 기반의 Docker hub에서 가져다가 쓸 수 있다. 이것을 run을 통해서 실행된 컨테이너로 만들 수가 있고 혹은 본인이 직접 만든 Docker이미지를 start해서 Running 시킬 수가 있다. Running된 도커 컨테이너는 Pause로 멈추고나 Unpause로 다시 Running 상태로 바꿀 수 있다. stop으로 Exited 상태, start로 다시 Running 상태로 바꾼다. 실행 되기전에 Exited 상태 혹은 Created 상태일 때 rm 명령어로 Deleted 상태로 바꿀 수 있다. 

 

[ Docker Workflow ]

  • docker build로 Dockerfile 실행해서 도커 이미지를 만들 수 있다.
  • docker pull로 도커 레파지토리에 있는 이미지를 클라이언트로 가져온다. 
  • docker run으로 Docker Image가 컨테이너로 실행화되게 한다. 
  • 혹은 docker pull은 외부에 레파지토리에 있는  nginx나 apache나 스프링 부트 등의 이미지가 있는 완성된 레파지토리에서 클라이언트로 받아서 바로 실행시킬수도 있다. 

웍플로우

1. 1분 자기소개

2. 학부 시절 때 좋아하는 과목

3. 했던 프로젝트 설명

4. 스프링에 대해 얼마나 알고 있는가?

5. 일과 후에 무엇을 공부할 것인가?

6. 지원한 직무의 업무에 대해서 아는지?

7. Opensource, OpenAPI의 차이

8. Social Login 구현 가능한지?

9. 로그인 구현 시 비밀번호 암호화 처리

10. 입사 후에 몇년까지 이 회사에 다닐 것인가? 

11. 지원자의 약점을 찝어서 질문 

12. 이뤘던 성과에 대하여 물어봄( 프로젝트 결과 같은 것들 )

13. 프로젝트 시 일어난 문제 및 해결 ( 협업과정 포함)

14. 본인 성격의 장단점 

15. 회사 복지에 대하여 언급하면서 이와 관련된 질문

16. 어려운 문제가 생기면 어떠한 방식으로 해결하나?

17. 왜 해당 직무를 하려고 하는지?

 

*. 거의 모든 회사는 면접 막 바지에 "우리 회사에 물어볼거 없나요?"라고 물어본다.

 

그리고 추후 내용을 더 추가할 예정

 강남의 어느 회사의 면접을 보았다. 이번엔 회사에 대해서도 조사를 해보고 업무 도메인에 대해서도 알아보는 등의 준비를 많이 해갔다. 기업 유튜브, 블로그, 잡플래닛에 있는 기록을 모두 정리해서 예상 답안을 만드는 등 어떠한 기술적인 질문이 나오더라도 준비를 다 해놓은 상태이다. 걱정되는 것은 처음에 1분 자기소개 부분에 약간의 긴장으로 인한 떨림을 제어하는게 어렵다는 것이었다. 물론 내가 떨면 옆에 있는 지원자도 떨리니까 이건 주변 사람들에게도 민폐이기도 하다. 또한 코로나 후유증으로 인해 생긴 기관지염은 잦은 기침을 하게 하여 질의응답 하는걸 걸리적 거리게 하는 것도 걱정이었다.

 

 면접은 이번엔 지원자 3인, 면접관 2인의 그룹면접으로 진행되었고 기술면접과 인성면접이 동시에 진행되었다. 오히려 이날 느낀건 그룹 면접이 더 재밌었다는점이다(???). 반면에 옆에 지원자들은 나보다 어린 친구들이었는데 매우 절실해보이고 초조해 보였다는점...(오히려 나보다...)  그리고 모두 학원을 수료한 친구들이다. 질문의 난이도는 그렇게 높진 않았다. 인성면접도 나름 평범하고 솔루션 직무이다보니 아마도 학원에서 배우지 않은 것을 새롭게 배워야하니 그 걱정에서 나오는 질문을 한분께서 주로 하셨다. 또한 다른 한분은 배움의 중요성을 강조하는 분위기였다. 퇴근 후에 무엇을 공부할 건지에 대한 내용도 있었고 프로젝트 질문으로 가서는 좀더 기술적인 측면으로 질문이 좁혀져서 일부로 특정 기능 부분을 구현해 보았냐고 물어보셨다.

 

 그 질문에 한 친구는 구현하지 않았다고 답했고 다른 친구에게도 그 친구가 구현하지 않은 기능을 일부러 물어보는 눈치였다. 나는 그 두 질문에 대해서 이미 해답을 가지고 있는 상태였는데 나에게는 일부러 물어보진 않았다. 나는 적당하게 프로젝트에 대한 나의 역할을 대답하였고 나 같은 경우엔 TMI식으로 조금 장황하게 풀어서 얘기하는걸 약간 줄여서 얘기해달라는 눈치를 받았다. 그래도 최대한 열의를 가지고 대답은 했는데 다음부터는 정리를 잘해서 요점만 말해야 겠다는 생각을 했다. 면접 내용은 이래도 그렇게 압박 면접은 아니었다. 나름 좋은 분위기속에서 진행되었고 두분다 친절하게 회사에서 무엇을 하는지 등, 회사에 대한 궁금점 등을 답해주셨다. 이것도 나름 좋은 경험이었다. 이전 면접에서는 프로젝트 얘기 할 때 오히려 면접관님들이 기술적인 측면은 안물어보셨고 이번에는 기술적인 측면을 주제를 좁혀서 물어보셔서 대답할 기회가 됬다. 또한 이전에는 성과만을 중요시 하는 면접관님들 이었다면 이번에는 조금은 달랐다. 배움과 성장을 중요시 하는 분들이었는데 이분들 밑에서라면 정말 열심히 일하고 싶다는 생각도 하였다. 

 

 면접이 끝난 날부터 다음날은 기침 증세가 다시 나타나서 약먹고 자고 약먹고 자고 그냥 이틀이 삭제되었다. 사실 그날 결과가 나올 줄 알았는데 그렇게 빨리 나오진 않았다. 오늘 아침이 되서야 결과를 받긴 했는데 기대와는 달랐다. 

 

결과는 떨어졌다. 뭔가 다른 관점이 개입되었던 것 같다. 대답은 나름 잘한 것 같았고 준비도 잘 해간 느낌이었는데 무엇이 나를 뽑는 것을 망설이게 한 것인지는 모르겠다. 어떤 기준일까? 무엇을 준비해 가야할지 모르겠다. 한편으로는 좀 더 열심히 준비해야 한다는 생각도 한다. 이대로 좌절하기보단 다른 기준이 개입될 수 없도록 확신이 서도록 준비를 할 필요성이 있다고 느꼈다. 코딩 테스트 준비도, CS 지식 준비도, 사이드 프로젝트도, CI/CD쪽 공부도.... 

'회고록' 카테고리의 다른 글

10월 ~ 11월 회고  (1) 2023.11.20
회사생활  (2) 2023.10.02
강의부자  (0) 2023.07.24
마무리  (0) 2023.07.14
면접후기  (0) 2023.06.24

잡코리아 이력서 사이트 모집 공고에 보면 단순히 개발자가 아닌 PL/PM을 모집하는 공고도 있고 도메인도 EAP, ERP, SAP 등의 되게 생소한 용어들이 많이 적혀있다. 그리고 조금 큰 회사라면 경영팀들과 관련된 포지션들과 용어들이 있는데 이런 것들을 한번은 면접에서 물어볼 수 있으니 이것들에 대해서 심플하게 한번 정리하고 가려한다.

 

IT 개발 프로젝트 포지션

PM(Project Manager)

  • 모든 관리 업무를 책임지는 사람
  • 현협, 외부 팀과 인터페이스 및 커뮤니케이션 담당&의견 조율
  • cf) TM(Team Manager) 

PL(Project Leader)

  • PM을 도와 프로젝트의 리딩 담당
  • 개발, 관리 능력(화면설계, 개발일정관리), 고급기술(DB, WAS 등), 구체적인 요구사항을 분석, 화면 설계하며 자신이 관리하는 개발자들이 실제 개발을 진행할 수 있도록 가이드하고 관리

AA(Application Architect)

  • 비즈니스 프로세스 설계를 바탕으로 실제 사용할 수 있는 ERP 등과 같은 IT 솔루션을 설계하는 역할 담당
  • 일반적으로 프레임워크를 바탕으로 설계를 진행하는 경우가 많고, 요약하여 업무 관련 로직 설계
  • 공통 로직, 개발표준, 프레임워크 등 공통업무 설계자
  •  ex.) 인터페이스, 업무와 관련된 모듈/기능 설계, 업무 분석 주도 및 문서화, 필요한 시간과 리소스 산정

TA(Technical Architect)

  • OS, WEB, WAS, DB 설치 등 하드웨어와 네트워크 구축 담당자

DA(Data Architect)

  • 데이터 표준, 구조, 품질, 마이그레션 등 DB 설계자

QA(Quality Assurance)

  • 산출물과 소스코드에 대한 품질을 보증하는 담당자

EA(Enterprise Architect) 또는 BA(Business Architect)

  • 기술적인 관점이 아닌 비즈니스 관점의 프로세스 설계자

SA(Solutions Architect)

  • 프로젝트나 어떠한 비즈니스 요구사항에 따라 개발환경과 같은 솔루션에 대한 설계 담당
  • ex) DevOps 환경 컨설팅을 하고 구축을 지원하는 역할

그 외 포지션들

QC(Quality Control)

  • 제품 관리, 제품을 검사하고 제품에 관한 내용을 보고하는 사람

CS(Customer Service or Customer Satisfaction)

  • 고객 만족에 관련된 포지션으로 고객으로부터의 피드백, 고객만족의 효과 비교분석, 서비스의 만족도를 평가하고 분석 등의 일을 한다. 

MD(MerchanDiser)

  • 상품의 기획 단계부터 시작하여 소비자에게 전달되기까지의 과정을 책임지는 전문가

CM(Category Manager) 

  • 물건을 판매하는 판매자들을 비슷한 카테고리로 묶어 관리 및 운영하는 사람

RA(Regulatory Affair)

  • 국.내외 각종 규제 및 법규사항을 파악하고, 제품의 인.허가를 담당하는 직무

IT 직군 용어

SI(System Integration)

  • 기획, 개발, 구축 촉박한 시간 내에 개발... 기능 완성하는 사람들

SE(System Engineer)

  • 시스템 구축하는 사람들로 이미 구축된 시스템 위에 추가적인 기능들을 개발

SM(System Management)

  • 유지보수 관리, 약간의 개발하는 사람들

도메인쪽 용어

Salesforce

  • 기업이 영업, 마케팅, 고객 서비스 및 기타 부터에서 고객 상호 작용 및 데이터를 관리하고 분석할 수 있는 클라우드 기반 고객관계관리(CRM) 플랫폼이다.
  • 고객 데이터 관리, 영업 자동화, 마케팅 자동화, 고객 서비스 관리, 사용자 정의 및 확장성 등~ 

RPA(Robotic Process Automation) 

  • 조직이 일상적이고 반복적인 작업을 자동화할 수 있게 해주는 기술

MES(Manufacturing Execution System)

  • 제조실행시스템
  • 제품의 주문 단계에서 완성 단계까지 모든 생산 활동의 최적화를 지원하고 실시간으로 정확한 데이터를 이용해 공장 내의 존재하는 모든 작업 활동을 가이드하는 등 착수 및 보고함

ERP(Enterprise Resource Planning)

  • 전사적자원관리시스템 or 전사적통합시스템
  • 생산이나 물류, 재무, 회계, 영업과 구매, 재고 등 경영에 필요한 모든 프로세스들을 통합적으로 관리하는 시스템

POP(Point of Production)

  • 공장의 생산과정에서 기계, 설비, 작업자, 작업 등으로부터 시시각각 발생하는 생산정보를 실시간으로 직접 수집, 처리하여 현장관리자에게 제공하는 시스템

SCADA(Supervisory Control And Data Acquisition)

  • 원격 제어 및 모니터링 시스템

PLC라는 것도 있는데 이것도 자동화설비쪽 용어 

 

EAP(Equipment Application Program)

  • 반도체쪽 분야 프로그램

PG(Payment gateway)

  • 온라인 결제 대행사

B2C(Business to Customer)

  • B2C 영업은 기업 대 소비자(Business to Customer) 영업을 총칭하는 말로, 제품이나 서비스를 직접 사용하는 소비자에게 판매가 이루어지는 방식

B2B(Business to Business) 

  • 기업간의 거래를 위한 영업 방식이다. B2B영업은 기업을 대상으로 기술 기반의 고도화된 제품, 서비스 또는 원자재 등을 판매하는 영업 활동

 

기억나는것들 나중에 추가로 적을 예정...

'잡지식' 카테고리의 다른 글

C++ 코드를 JNI로 Java에서 실행하기  (0) 2023.11.28
코딩테스트  (0) 2023.07.24

 특정 인터넷 강의사이트에서 자바 알고리즘 강의를 결제하고 수강하고 있었다. 해당 사이트는 특정 날짜가 되면 강의를 오픈하는 형식으로 구성이 되어 있는데 전체 강의를 모두 오픈하기도 전에 비싼 강의료를 받고 사전에도 강의를 판매하고 있다.

 

이 강의가 올해 초부터 사전예약을 받고 판매하고 있었는데 타사의 강의보다 매우 비싼편에 속해서 학생들 보단 직장인들이 많이 듣는다. 나도 이걸 이전부터 듣고 싶었으나 시간이 없어서 못듣고 최근에 일주일 전에 막 결제를 했고 이제 마지막 강의가 오픈된다고 들떠 있었는데 갑자기 메일 한통을 받았다. 

 

해당 강사님이 건강상의 문제로 인하여 강의마지막 파트를 공개할 수 없다는 점과 오픈 일정을 2달가까이 연장시킨다는 점이었다. 심지어 강사가 교체된다는 말은 정말 최악이었고 보상절차가 바로 이야기가 안나온점은 조금은 많이 황당하게 하였다. 이러한 대처에 많은 항의를 받아서 그런건지 3일이 지나서야 나름 만족할만한 보상이야기가 나왔다.

 

 모든 프로그래밍 강의를 대략 3달정도 기간제를 들을 수 있는 이용권이 지급되었다. 놀랍게도 진짜 평소에 듣고 싶었던 강의가 모두 포함되었으며 뷔페식으로 무제한으로 모든 강의를 들을 수가 있다.. 지금 들어야할 강의도 많은데 이렇게까지... 되버리니 정말 할게 많아지고 배가 부르다 정말..

 

'회고록' 카테고리의 다른 글

회사생활  (2) 2023.10.02
면접후기2  (0) 2023.07.29
마무리  (0) 2023.07.14
면접후기  (0) 2023.06.24
포트폴리오 사이트 배포  (0) 2023.06.23

오랜만에 코테를 풀어 봤는데 몇가지 습관을 들여야 겠다는 생각을 했다. 

 

아래 문제는 시간 0.15초, 메모리 256MB에 제한이 있는 문제다. 그냥 직관적으로 풀면 쉽게 답이 나오지만 사실은 시간초과로 바로 풀리지는 않는 문제다. 그냥 풀어버리면 시간 초과니 따로 모듈러 연산으로 규칙성을 찾으라는 문제인데 몇가지 키워드를 미리 확인했다면 이런 분류의 문제라는 걸 확인할 수 있는데 그냥 막 풀면 놓치기 쉽다. 그래서 뭔가 생각했어야 했다. 기계적으로... 

 

 

우선 위 문제를 보면 t가 200.000.000 라는 것을 체크 했어야 했다. 이게 시간 복잡도를 가늠할 수 있는 지표니까 대략 1초 1억개의 기본연산 기준이니까 O(n)이 되버리는 순간 이 문제는 시간초과로 못푼다. 그럼 O(1)로 만들어야 하는데 문제 구조상 뭔가 대칭의 형태가 보이고 반복적인 규칙이 있을거 같으니 이런건 직접 노트에다가 다 적어봐야 한다. 풀이 결과를 보면 X(t) = X(t+2W) 형태의 주기성을 가지고 있었고 주기성을 가지고 있다면 for문의 반복 횟수를 확! 줄일 수 있다. 그 외에도 공간복잡도는  w, h가 40000이니까 이걸 배열로 만들면 1.6GB인데 배열을 굳이 안쓸꺼니까 상관없다는 것도 체크하면 된다. 

 

밑의 내용은 요즘 듣는 강의에서 알려주는 내용인데 조금 정리해본다. 

올바른 문제풀이 순서

  • 읽기
    • 시간, 메모리 제한
    • 문제 전체를 꼼꼼히(키워드 체크)
  • 이해하기
    • 제공되는 정보(변수들) 정리(타입조심하기..)
    • 예제 데이터에 대해 이해(데이터가 어떻게 생겼냐?)
  • 파악하기
    • 가능한 최대, 최소 정답에 맞는 데이터를 직접 생성(데이터를 만들어보기)
    • 키워드가 되는 단어들을 체크
  • 추가로 테스트 케이스 좀 더 다양하게 해서 최종적으로 검증하기

 

자바 속도 쬐금이라도 줄이기

 I/O쪽은 어느 언어든지 시간을 많이 먹는 파트이다. 자바에서는 Scanner 연산을 기본적으로 쉽게 쉽게 사용하는데 이게 BufferedReader  보다 시간을 좀 더 많이 먹는편이라 만약에 반복적으로 입력을 받아야 한다면 Scanner 연산 보다는 BufferedReader 클래스로 입력을 받아야 한다. 

 

그리고 JAVA 8이 JAVA 11보다 조금 빠르다. 예를 들면 어떤 문제에서는 JAVA8에서 String의 덧셈 연산을 한 결과는 시간초과 없이 통과되나 JAVA11은 시간초과가 뜬다. 이것을 StringBuilder로 String 덧셈연산을 대체해서 시간을 줄일 수 있는데 진짜 이렇게 까지해서 풀어야 할 문제는 많이 없긴하다.

 

  • BufferedReader 사용
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
int maxX=Integer.parseInt(st.nextToken());
int maxY=Integer.parseInt(st.nextToken());
	
// currPoint
st=new StringTokenizer(br.readLine());
int x=Integer.parseInt(st.nextToken());
int y=Integer.parseInt(st.nextToken());

// try		
st=new StringTokenizer(br.readLine());
int n=Integer.parseInt(st.nextToken());
  • String + 연산 쓰지 말고 StringBuilder 사용하기
StringBuilder sb = new StringBuilder();
sb.append(x);
sb.append(" ");
sb.append(y);
// String + 연산은 매우 느리다. 
System.out.println(sb);

 

참고 >

핵심유형 20개로 한 번에 끝내는 알고리즘 코딩테스트 with Java

'잡지식' 카테고리의 다른 글

C++ 코드를 JNI로 Java에서 실행하기  (0) 2023.11.28
IT 직군 관련 포지션, 용어 정리  (0) 2023.07.25

앞에서 했던 포스트에서 ec2 인스턴스를 만들었고 aws 사이트에서 해당 인스턴스로 접속하였었다. 그 방법 외에도 더 자주 사용하는 방법은 cmd창을 열어서 ssh로 바로 접속하거나 putty나 MobaXterm이라는 원격 접속툴을 사용하는 방법이다. 추가로 파일을 EC2 인스턴스에 파일을 업로드하는 방법도 소개하려 한다.

 

SSH 원격접속하기

 먼저 ssh로 접속하는 방법은 다음과 같다. 

  • ssh -i pem파일명 접속하는username@퍼블릭IP주소

 

이렇게 ssh로 접속하는 방법은 cmd를 열고 원격 서버 접속을 위한 ip나 key값등을 타이핑해야 하는 번거로움이 있고 다수의 서버를 사용하는 입장이라면 이러한 것들을 매번 기억하기도, 일일히 입력하기도 귀찮다. 이러한 귀찮음을 보완해주는 것이 putty라는 GUI 원격 접속 프로그램인데 이건 좀 나온지 오래되기도 하고 무료에다가 굉장히 쓸만해서 주변에서 사용하는 것을 많이 봤던 프로그램이다. 화면 구성은 아래와 같다. 다만 ssh접속으로 하되 GUI 구성이라 좀더 다루기 편하고 내가 이전에 접속했던 세션연결을 저장할 수 있어서 다음에 또 접속하기가 편하다. 그리고 다양한 설정도 셋팅할 수가 있는데 원격접속만 해보고 별다른 셋팅을 해본적은 딱히 없다. 

이렇다.

putty 원격 접속하기

이전에 발급받은 private key인 pem 파일이 있을것이다. 이것을 ppk형태로 변환 시킨 후에 load시켜 putty에 접속해야 한다. 이 때 pem파일을 ppk 파일로 변환하기 위해 puttygen을 사용한다.

  • pem to ppk
    • puttygen을 실행시켜서 load버튼을 눌르고 All Files로 파일 종류를 바꾸고 pem파일을 로드한다.
    • Save private key버튼을 눌러서 적당한 파일이름으로 저장

  • Connection > SSH > Auth > Credentials > Private key file을 등록한다.
  • Session 탭에서 Host Name에 접속하려는 EC2 public IP를 입력하고 Open하면 연결이 되는데 Saved Sessions에 새션 이름을 입력하여 연결 설정을 저장할 수 있다.

  • open후에 창이 뜨고 login as: 라는 칸에 ubuntu라고 입력하면 접속이 된다.

이렇게 ec2 서버에 연결이 되었는데 putty의 단점은 파일 업로드시에 번거롭다는 단점이 있는 것이다. 업로드를 하려면 보통은 파일질라와 같은 FTP프로그램을 추가로 설치해서 하는 경우나 혹은 putty와 함께 설치되는 pscp를 이용하여 업로드를 하는 방법이 있다. 하지만 이와 같은 작업들은 추가로 설치작업을 하는 경우 혹은 커맨트 창에 명령어를 직접 입력하는 등 뭔가의 편의성이 떨어지는 단점이 있다. mobaXterm이 많이 보급되기 전에는 FileZilla로 많이 업로드를 했는데   mobaXterm가 사용하기도 편하고 FTP(SFTP)를 포함하여 이것저것 서비스를 함께 제공한다는 장점으로 요즘은 putty보다는 처음부터 mobaXterm으로 바로 원격 프로그램을 입문하는 경우도 있다.

 

MobaXterm 원격 접속하기

mobaXterm을 실행해보면 GUI 형태로 뭔가 이것저것 기능이 많다는 것을 바로 확인할 수 있다. 접속하기 위해선 Session 아이콘을 클릭하면 된다. 

Session settings 창이 뜨는게 저기에 public IP를 입력하고 username을 ubuntu라고 명시한 후  Use private Key를 체크하고 pem파일을 로드하면 접속이 된다. 

파일 업로드

mobaXterm에서는 SFTP라는 기능을 제공한다. 이것은 SSH File Transfer Protocol의 약자로 SSH가 이미 설치된 상태이기 때문에 바로 사용이 가능하다. SFTP를 아래 화면 처럼 선택하고 public IP주소와 private key를 넣어주면 마찬가지로 SFTP창이 열린다. 

SFTP 셋팅창

 사용법은 매우 간단한데 옮기고자 하는 파일을 드래그하면 이동이 된다. 콘솔창에서 명령어를 입력하는 방식보다 매우 편하다. 또한 SFTP 창 안에서 파일 삭제, 파일 이동, 폴더 생성, 파일 생성 등이 가능하니 파일 업로드 외의 기능으로도 사용이 용이하다.

 SFTP가 아니더라도 github를 이용하여 원격에 있는 파일을 서버에서 내려받는 방식을 이용하기도 하는데 그럴 경우에 gitignore에 있는 설정 파일들은 못 끌어오니 이러한 업로드 방법을 사용하면 될 것이다. 

+ Recent posts