안녕하세요. 저번에 질문드렸던 4학년 멘티입니다. 멘토님의 글을 보고 많이 위로됐어요. 저는 음악을 줄곧 해왔기 때문에 주변에도 음악 하는 친구들뿐이라 쉽사리 음악을 관뒀다고 말을 못 하고 있었는데, 멘토님의 친절하고 다양한 진로 조언이 큰 힘이 됐어요.
이번에는 전공에 관한 멘토링을 받고 싶어 이렇게 연락 드려요. 저는 사이버대학 학생이고, 사이버대학에는 IT 과목이 없어서 특히 관련 정보를 얻기 힘든데요. 최근에 C 언어를 접했는데 제 적성에 딱 맞는다고 할 정도로 엄청 재밌었어요. 특히 답을 유추하는 과정이 재밌더라고요.
그래서 웹 개발 쪽은 어떤 길이 있는지 알아보고 있는데요. 이쪽으로 진출하려면 어떤 스펙과 경험을 쌓는 게 도움이 될까요? 알아본 바로는 asp, php, jsp, 리눅스&윈도우 서버 관리, DB 서버 관리를 해야 한다고 하던데 1학년이나 2학년 때 해보면 좋은 공부나 활동을 소개해 주실 수 있을까요? 감사합니다.
💬 홍성모 멘토의 답변
안녕하세요 멘티님, 다시 질문을 남겨 주셔서 저도 무척이나 반갑고 뿌듯하네요. 그리고 힘이 되셨다니 정말로 기쁩니다.
웹 개발은 무엇일까요?
웹 개발로 큰 줄기를 정하셨다 하시니, 일단 웹 개발의 전반적인 모습에 대해 말씀드리도록 할게요. 웹 사이트는 단순하지만은 않은 과정을 거치고 난 후에야 화면에 나타나게 됩니다. 가장 간단한 것부터 말씀드리면,
[ 사용자 ] → [ PC ] ↔ [ 서버 컴퓨터 ]
와 같이 동작을 하는데요.
동작 순서를 조금 더 자세히 살펴보면 아래와 같은 과정을 거쳐요.
1. [ 사용자 → PC ] 사용자가 PC에 웹 페이지의 URL 주소를 (예를 들면 http://www.naver.com, http://www.daum.net) 입력하고 엔터를 친다. 2. [ PC → 서버 컴퓨터 ] PC에 입력한 URL 주소에 맞는 서버 컴퓨터를 찾아간다. 위에서 예를 든 네이버 혹은 다음 사이트는 각각 다른 서버 컴퓨터라서, 정확한 서버 컴퓨터로 찾아가지요. 3. [ PC ← 서버 컴퓨터 ] 서버 컴퓨터는 자신을 찾아온 PC에 웹 페이지 내용을 전달한다 4. [ 사용자 ← PC ] PC는 받아온 웹페이지 내용을 사용자에게 보여준다.
위와 같은 과정을 거치게 됩니다.
웹 개발이라고 함은, 위에 3번 과정을 맡는 것이 주 업무에요. 웹 개발자의 경쟁력은 3번 과정에서 "서버 컴퓨터에서 PC가 요청한 내용을 얼마나 잘 처리하는가", 그리고 "사용자에게 전달할 웹페이지 내용을 어떻게 잘 보여줄 수 있을까"에서 갈립니다.
최근 PC에서 서버 컴퓨터에게 요청하는 내용이 점점 복잡해짐에 따라, 웹 개발자도 경쟁력이 중요하게 되었어요. 멘티님께서 나열하신 기술들 대부분은 "서버 컴퓨터에서 PC가 요청한 내용을 얼마나 잘 처리하는가" 에 대한 기술&테크닉들이에요.
웹 개발, 어떤 분야를 파고들어야 할까요?
C 언어에 흥미를 느끼셨다면, 후자의 "사용자에게 전달할 웹페이지 내용을 어떻게 잘 보여줄 수 있을까" 에 흥미가 있으신 거예요. 물론 전자도 잘 해야 완성된 웹 개발자가 되겠지만, 아무래도 끌리는 부분부터 하는 것도 장기적으로 볼 때 좋은 접근법이라고 생각해요.
이쪽은 JavaScript(자바스크립트)부터 시작하시면 되겠습니다. C언어랑 비슷한 부분이 많고, 특별한 준비 없이도 바로 실습이 가능한 게 장점이에요. 자바스크립트를 하다 보면, 추후 jQuery라는, 자바스크립트와 비슷한 기술로 넘어가시면 될 거예요. 하지만 jQuery는 대학 때 익히실 필요는 없으니 자바스크립트를 해보시고 이것보다 더 깊이 해보고 싶다는 생각이 드시면 그때 시작하시면 돼요.
"서버 컴퓨터에서 PC가 요청한 내용을 얼마나 잘 처리하는가"에 대한 내용을 간단하게 예를 들어 설명해 볼게요. 만약에 사용자가 "90년대 댄스곡을 모두 보여줘"라는 요청이 들어왔다고 가정해 봅시다. 그러면 서버는 이 내용을 알아듣고 자기가 보관하고 있는 90년대 노래 중에서 댄스곡을 찾아 골라내겠죠. 그걸 찾고 나니 사용자 요청이 더 복잡하게 들어옵니다. "클래식 음악 중에 모차르트가 작곡했는데 나중에 기타로 편곡된 노래를 찾아줘". 결과를 내는 속도가 빠르면서, 결과물의 품질이 좋고, 프로그램을 계속해서 개선하기 편하게 만드는 것이 "잘 처리하는 것"입니다.
하지만 이 부분은 아무래도 이 부분은 실습하기가 좀 어려워요. 우리는 PC를 켜면 자동으로 윈도우가 켜지잖아요? 근데 보통 서버 컴퓨터들은 [리눅스]라는 것이 켜져요. 윈도우랑 동작 방식이 많이 달라서 좀 어색할 거예요. 실습이 가능하도록 PC를 세팅하는 것에서부터 흥미를 잃을 수밖에 없기 때문에, 먼저 컴퓨터 & 컴퓨터 프로그래밍에 더 익숙해지시고 난 후 넘어오는 것을 추천해 드려요.
리눅스와 친해지시고 싶으시다면, 최근 윈도우랑 가장 비슷하게 만든 우분투를 사용해보시는 것을 추천해 드려요. 윈도우에서 우분투를 설치하는 방법은 검색을 통해서 알아보시는 게 좋을 것 같지만, 아무래도 처음이라 생소하실 것 같아 설명된 웹페이지를 드릴게요. http://webnautes.tistory.com/448
웹 개발, 스킬트리 이렇게 찍어 보세요
다시 원래 질문하신 내용으로 좀 돌아와서 1학년 / 2학년 커리큘럼에 맞춰서 제가 주관적인 추천을 한다고 하면, 1학년 때는 C언어에 익숙해지는 것에 초점을 많이 맞추시고, HTML과 JavaScript (자바스크립트)를 사용해서 "아! 이건 무슨 말인지 못 알아듣겠다" 하는 난이도 전까지 해보시는 것을 추천해 드려요.
2학년 때는 우분투를 설치하여 리눅스와 많이 친해지시는 것을 추천해 드리고, C언어 외에 Java 언어를 시작해보세요. 말씀하신 jsp의 조상이 Java거든요. Java를 이해하시면 간단한 jsp 설명서만 가지고도 jsp라는 것을 사용하실 수 있어요.
그 외 asp, php, 윈도우 서버 관리는 최근 십수년간은 잘 안 쓰입니다. DB 서버를 말씀하셨는데, DB 자체가 어려운 건 전혀 없어요. 오히려 이해하기 엄청 쉬운 편이죠. 대신 실습 환경을 구성하기가 까다롭습니다. 만약 대학 강좌에 "데이터베이스"라는 과목이 있으면 이 과목을 통해서 배우시는 것을 추천해 드려요.
2학년을 마칠 때쯤, 누군가 이러이러한 웹페이지를 만들어 달라고 했을 때, 디자인 요소를 제외하고 페이지 구현을 할 수 있을 정도면 준수한 수준의 실력을 갖췄다고 평가될 수 있을 거예요. 웹페이지가 아닌 웹서버까지 만들 수 있다면 정말 정말 훌륭한 거고요. 이 경지에 이를 수만 있다면 회사를 1년 다닌 신입사원만큼의 실력인데, 99.9%의 평범한 사람들은 원래 이 정도까지 못 하는 게 당연하니 너무 스트레스받지는 마세요.
그리고 한 가지 팁을 드리자면, 프로그래밍하다가 막히는 것이 있을 땐 구글에 가서 찾아보는 것이 가장 빨라요. (흔히 말하는 구글링입니다.) 대신 한국어보다 영어로 검색하는 게 자료의 양도 많고 원하는 답도 더 많이 나와요.
물론 걸림돌이 될 만한 것은 영어를 잘 읽어야 한다는 사실이지요. 대신 높은 수준의 영어가 필요한 게 전혀 아니고, 띄엄띄엄 읽을 수만 있어도 성공이니 금방 익숙해질 거에요!
좀 두서없이 나열한 면이 있네요. 알아보시기 어렵지 않았으면 좋겠습니다. 멘티님께 도움이 잘 되었으면 좋겠어요. 질문 생기시면 언제든지 다시 찾아주세요.