멘토지원
파트너스
현직자 클래스
멘토 찾기
Best 질문답변
서버 개발자, 어떻게 공부를 시작해야 할까요?
멘토
IT개발/데이터
약 5년 전
💬 멘티의 질문
안녕하세요, 멘토님. 저는 입사한 지 3개월 된 신입 안드로이드 개발자입니다.
 
그동안 일하면서 안드로이드 개발만으로는 경쟁력이 부족하다 느끼고 있었는데요. 그러던 중에 동료 개발자분을 보며 서버 개발에도 관심이 생겨 이렇게 질문을 드리게 되었습니다.


Ⓒfabian grohs

 
*스프링과 DB 모델링을 배우고 싶은데, 어떻게 공부를 시작하면 좋을까요? 그리고 서버 개발자가 되기 위해서 더 필요한 것이 있다면 어떤 게 있는지 조언 부탁드립니다.
 
그럼 답변 기다릴게요. 질문 들어 주셔서 감사합니다.
 


*스프링 : 스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 불린다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로서 쓰이고 있다.
 
💬 Robin Seo 멘토의 답변

안녕하세요, 멘티님. 글을 보니 서버 개발자를 새롭게 준비하시려는 중인 것 같네요. 일단 안드로이드에서 *API를 이용한 네트워크 통신을 붙여 보신 경험은 있으나, 스프링은 다뤄 보신 적이 거의 없다는 것을 전제로 해서 말씀드릴게요.


ⒸNegative Space

 

스프링과 마이바티스를 기본적으로 배워야 해요

본격적인 답변을 드리기 전에, 제가 주로 서버 구축을 할 때 사용하는 기술들을 조금 말씀드리는 게 좋을 것 같네요. 저는 스프링 프레임워크 v3.2와 *마이바티스(Mybatis, 데이터베이스 매퍼)를 사용하고요. 스프링으로 짠 프로젝트는 웹 애플리케이션 서버인 Tomcat 7에서 돌리고 있어요. (현재 최신 버전은 8이에요.) 로드 밸런싱 등을 위해서 사용하는 Tomcat 상위의 웹 서버는 nginx를 사용하고 있고, 서버 운영체제는 ubuntu16을 사용합니다.
 
기본적으로 스프링과 마이바티스를 익히는 게 가장 중요한 학습이 될 것 같고요. 이외에 tomcat 설정 방법, nginx 설정 방법 정도가 부차적인 학습이 될 듯합니다.
 

스프링 학습, 인터넷과 국비 과정을 이용하세요

이제 스프링 학습에 관해 말씀드려 볼게요. 스프링 프레임워크는 현재 버전 3과 버전 4, 그리고 버전 4를 기반으로 한 스프링 부트(Spring boot)가 나와 있어요. 스프링의 경우, 여타의 프레임워크에 비해 설정이 무척 복잡하고 까다로운 편인데요. 대신, 한번 세팅만 해두면 그 후에 API를 작성하는 데는 시간이 얼마 걸리지 않는다는 장점이 있습니다.
 
스프링 기초를 배우기 위해서는 인프런(Inflearn.com)에서 무료 인터넷 강의를 들을 수 있고요. 그 외에도 내일 배움 카드를 발급받으신 후, 학원에 가셔서 직장인 환급 과정으로 열리는 스프링 강좌를 들어보시는 것도 큰 도움이 될 거예요. 저 역시 먼저 학원에 가서 배운 후, 나중에 작업을 하면서 조금 더 깊게 공부했거든요.
 
그밖에 스프링에서는 정석이라고 불리는 ‘토비의 스프링’이란 책이 있는데요. 두껍기는 하지만 권해드릴 만한 책인 것 같아요. 주로 Servlet, Java Bean, Dependency Injection, Control Of Inversion, Aspect Oriented Programming과 같이 스프링 프레임워크의 근간이 되는 기초 개념들을 잘 설명하는 것으로 알려져 있습니다.


Ⓒmath

 

학습 이후에 실제 API 서버를 구축해 보세요

이렇게 스프링을 학습하셨다면 그 이후에는 실제로 작업을 해 보면 좋은데요. 아무래도 안드로이드 개발자이시니 만큼, 실제로 API 서버를 구축해서 하나의 앱 서비스를 만들어 보시는 게 가장 좋을 것 같아요. 의외로 프로그래밍은 그럭저럭 별문제 없이 잘하는데 *소프트웨어 전개(deploy)할 때 서버 세팅을 못 해서 문제가 생기는 경우가 많거든요.
 
보통 많이 쓰는 호스팅 업체에서 SSD 가상 서버를 사면 일 년에 44,000원 정도 드는데, 학습 용도로 쓰기 알맞은 형태의 서버라서 추천해 드리고 싶습니다. JSP 단독 호스팅도 있기는 한데, 클러스터링이나 로드밸런싱을 못하기도 하고요. 터미널 기반이 아니다 보니, 저는 답답함을 많이 느껴요. 가상 서버 하나 구입하셔서 API 서버를 직접 구축해보시면 좋을 것 같네요.
 
실제로 API 서버를 구축하실 때에는 API 문서를 명세해 보는 것도 추천합니다. 이 부분에 대한 중요성은 안드로이드 개발자인 멘티님께서 더 잘 아실 거로 생각합니다.


ⒸLukas

 

DB 모델링 과정과 사용 툴은 이렇습니다

다음으로는 DB 모델링에 대해 말씀드릴게요. 저는 서비스 기획이 나오고, 화면 디자인이 다 나온 시점에서 API 명세를 먼저 적습니다. 그다음에 API 명세에서 뿌려 주거나 입력받는 데이터들을 나열해 보고 이걸 테이블로 묶어본 후, 데이터 독립성과 무결성에 대해서 고민을 해요.
 
제가 대형 서비스를 다뤄 보지는 못해서요. 전문적으로 DB 설계를 하는 *DBA 쪽에 흥미가 있으시다면, DBA 쪽으로 완전히 전향하셔야 할 것 같고요. 서버 개발자라면 API 명세에 모델링(Entity) 적고, 그대로 DB에 얹혀 주는 정도까지만 하셔도 좋지 않을까 싶어요.
 
제 경우 스프링 통합 IDE인 Spring Tool Suites (Eclipse 기반)에 Amateras 플러그인을 깔아서 모델링을 해요. 여기에 관련된 자료는 링크를 참고해 주세요. (Amateras Modeler 링크 https://github.com/takezoe/amateras-modeler)
 
통상의 모델링 다이어그램과, 각 테이블 간의 Has-Many 관계를 표현할 수 있는 기능에 더해 DDL 생성이 되기 때문에 저는 개인적으로 Amateras를 선호합니다.
 

Ⓒpor suwat


실제 기획을 통해 배포까지 꼭 해 보세요

끝으로 제가 드렸던 말씀을 간단히 정리해 보면요.
 
스프링 프레임워크 기초 강좌 수강 -> 간단한 블로그나 메모장 앱 기획해 보기 -> 데이터 모델링 -> API 명세 -> 코딩 -> 실 서버 배포
 
이 과정으로 학습하시는 게 가장 빠르고 확실한 방법이라고 말씀드릴 수 있습니다.
 
지금 회사에 다니신다고 하니, 사내에서 지급하는 자기 계발비와 내일 배움 카드 제도, 또 회사 서적과 사수를 적극적으로 활용하셔서 원하시는 성과를 이루시길 바랍니다. 궁금하신 사항이 있으시다면 다시 질문 주세요. 감사합니다.
 


*API : API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.
 
*MyBatis : 마이바티스(MyBatis)는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 애너테이션(annotation)을 사용하여 저장 프로시저나 SQL 문으로 객체들을 연결시킨다. 마이바티스는 아파치 라이선스 2.0으로 배포되는 자유 소프트웨어이다.
 
*소프트웨어 전개 : 소프트웨어 전개(deploy)는 소프트웨어 시스템을 사용할 수 있도록 만드는 모든 활동을 말한다.
 
*DBA : 데이터베이스 관리자(database administrator, DBA)는 한 조직 내에서 데이터베이스를 설치, 구성, 업그레이드, 관리, 감시하는 일을 맡은 사람을 가리킨다.

같은 직무를 다룬 글
IT개발/데이터
약 2달 전
인기 있는 글
연구/설계
약 5년 전