삼성SDS

삼성SDS

개발팀 리뷰

위 내용은 삼성SDS 전 • 현 재직자의 응답 결과입니다.

기술 스택

언어

Java

javascript

프론트엔드

VueJS

React

백엔드

SpringBoot

MyBatis

Spring

git

데이터베이스

PostgreSQL

MariaDB

MySQL

데브옵스

Github

Jenkins

Helm

재직자가 작성한 글

profile picture

김병호

삼성 SDS 프로젝트 관리

SI 프로젝트 검수를 잘 받는 방법

프로젝트 종료는 빨리 끝내고자 하는 프로젝트 팀과 허용범위내에서 최대한 늦게 끝내고자 하는 이해관계자 또는 운영조직의 상충되는 이해관계가 대립하는 활동이다. 따라서 검수와 인수인계에 대한 사전준비가 미흡하면 프로젝트 종료의 실타래가 꼬여 납기가 지연될 뿐만 아니라 종료를 앞두고 이해관계자와 갈등이 발생하기 쉽다. 프로젝트 팀과 운영조직이 다를 경우에는 프로젝트 종료에 대해 보수적으로 접근해야 한다. 프로젝트 검수와 인수인계에 대한 구체적인 방법과 종료기준과 프로세스에 대한 확신이 없으면 종료할 준비가 덜 된 것이다.   - 검수기준을 정의한다. 프로젝트 종료를 승인하는 검수확인서(또는 준공확인서)에 고객의 승인을 받기 위해서는 행정적인 요건을 충족함과 동시에 이해관계자들의 기대수준을 충족시켜야 한다. 검수항목은 보통 계약서에 명시되기 때문에 항목자체는 이슈가 되지 않고 검수 프로세스를 구체화하기 위해 검수항목별로 검수내용, 검수방법, 검수자, 템플릿을 정의해야 한다.  SI 프로젝트의 검수항목중 이슈가 될 수 있는 내용은 ‘응용시스템’이다. 응용시스템 검수는 인수테스트 또는 통합테스트에 고객이 참여하여 요구사항이 오류 없고 불편하지 않게 작동하는지 확인하는 활동이기 때문에 프로젝트 팀과 고객의 의견이 많이 다를 수 있다.    - 검수항목별 검수책임자를 결정한다.   고객사의 적용조직이 큰 경우에는 동일한 업무를 지역별 또는 국가별로 검수 받아야 할 수 있다. 이런 경우에는 고객측에서 이견을 조정하고 검수와 관련된 의사결정을 할 수 있는 조직(의사결정기구)을 구성해야 한다. 예를 들어 전국에 흩어진 조직이라서 수시로 모이기 힘들면 검수 워크숍 또는 각 업무별 분과회 운영을 통해 최종 검수요건을 결정하도록 하는 것도 좋은 방안이다. 지역별로 검수를 받는 다면 시간의 문제가 발생할 뿐 아니라 지역별로 상충되는 의견을 조정하기란 불가능에 가깝다.   - 종료시점에 도출된 요청사항에 대한 수용기준을 협의한다.   프로젝트 종료 및 안정화 시점에 도출된 고객 요청사항은 관점이 다르기 때문에 대응하기 힘들다. 종료시점에는 중요한 변경요청에 대해선 합의가 된 상황이어야 한다. 만일 종료시점에 규모가 큰 변경요청사항이 논의된다면 종료할 준비가 되지 않은 상태이다. 종료시점에서는 기존에 합의한 화면 개선 또는 데이터 추가와 같은 세부 요청사항이 있을 수 있다. 종료시점에 고객과 협의 할 수 있는 추가 요청사항에 대한 수용기준의 예는 다음과 같다.   • 요청사항의 접수기한을 한정한다. 종료시점에 도출되는 요청사항은 기한을 정해야 한다. 예를 들어 통합테스트 기간 동안 도출된 요청사항 또는 안정화기간의 일부기간 동안 도출된 요청사항으로 한정하는 것이다. • 요청사항의 유형별로 수용기준을 정의한다. 종료시점에 파악한 오류는 당연히 수용해야 한다. 그러나 프로세스를 변경하는 요청사항은 수용하지 않는 것을 원칙으로 해야 한다. 사용성 개선을 위한 화면 변경 또는 조회 데이터 변경은 지원가능한 MM를 고려하여 우선순위를 결정하는 것이 바람직하다. 모든 개선요청사항들이 사용자 입장에서는 필요하기 때문에 우선순위 결정을 위한 제약조건에 대해 협의를 해야 한다. 프로젝트 관리자는 고객과 협의하기 전에 프로젝트 마무리를 위한 작업이 계획된 일정 또는 MM를 초과한다면 본사 경영층과 협의하여 마무리 지원방안을 결정해야 한다.   - 주요 이해관계자는 개별적으로 검수에 대한 승인을 사전에 획득한다. 프로젝트를 종료해도 좋다는 최종 의사결정은 고객사 경영층이 하는 경우가 많다. 따라서 이러한 경영층에게는 운영자・사용자의 검수에 앞서 프로젝트 결과를 설명하고 검수에 대한 승인을 받는 것이 좋다. 고객측 경영층이 검수에 긍정적인 평가를 한 상태에서 운영자・사용자 검수에 들어가면 프로젝트가 크게 흔들릴 일은 없다. 반대로, 아래로부터 개별 검수를 다 받았는데, 경영층에서 막히면 종료의 전체 구도가 틀어지는 경우가 많다. 고객측 경영층을 만나기 전에는 경영층의 이해관계와 관심사항이 프로젝트에 어떻게 반영되었는지와 프로젝트를 통해 해결한 문제 혹은 좋아진 점을 명확하게 설명할 준비를 해야 한다.   -  고객측 검수 책임자와 공동의 이해관계를 형성한다. 종료시점에서 검수 책임자와 프로젝트 관리자는 사이좋은 부부처럼 일심동체가 되어 고객측 이해관계자의 다양한 이해관계에 대응하는 것이 이상적이다. 프로젝트 팀의 프로젝트 관리자 못지 않게, 고객측 검수 책임자도 프로젝트를 잘 끝내고 싶다. 프로젝트를 잘 끝내야 각자의 조직에서 검수 책임자와 프로젝트 관리자는 좋은 평가를 받을 것이다. 먼저 프로젝트 관리자가 고객측 검수 책임자의 입장을 최대한 배려한다는 느낌과 신뢰를 주어야 한다. 프로젝트 관리자와 검수 책임자가 같은 배에 타고 있고, 같이 안전하게 배에서 내릴 준비를 해야 한다. 프로젝트 관리자가 빨리 종료하려는 마음이 급해 먼저 배에서 내리려고 한다는 인식을 준다면 검수책임자는 프로젝트 관리자를 결코 쉽게 보내주지 않을 것이다. 프로젝트 관리자의 이해타산만 따져서는 원만한 종료를 할 수 없다. 작은 것을 손해볼 때 큰 것을 얻을 수 있다. - 프로젝트 종료계획을 수립한다. 프로젝트 착수시 수립하는 프로젝트 계획 못지 않게, 프로젝트 종료를 위한 계획수립도 중요하다. 늦어도 프로젝트 진척률 80퍼센트 정도 시점에서는 프로젝트 종료계획을 수립하여 종료시점까지 계속 업데이트해야 한다. 종료계획 수립시 고려할 요소는 다음과 같다.   • 업무진행 현황 점검 계약서에 정의된 업무범위 대비 이행 여부, 최종 제품에 요구사항이 반영되 었는지 여부는 요구사항 추적표를 활용하여 확인한다. 종료시점에 이슈가 될 수 있는 미진한 업무나 추가 요구사항도 같이 식별한다. 검수전략과 검수계획 수립 검수의 목적물별로 누구를 상대로 어떻게 검수를 받을 것인지에 대한 계획을 수립한다. 검수전략에서는 전체 업무를 일괄적으로 검수 받을 것인지 아니면 단위업무별로 검수를 받고 관련 인력을 철수할 것인지를 결정한다. 대형의 복잡한 프로젝트에서는 단위업무별로 검수를 받고 관련 인력을 철수하는 것도 좋은 방안이다.   • 잔여업무 처리를 위한 일정계획 수립 종료시점에서는 잔여업무 목록 혹은 실행항목을 정의한 다음 고객 검수조직과 합의해야 한다. 잔여업무 목록 혹은 실행항목은 프로젝트의 실질적인 검수기준이 되는 경우가 많기 때문에 목록으로 만들어 완료 여부를 고객과 확인해야 한다. 잔여업무와 실행항목이 없어질 때 비로소 프로젝트 업무범위의 이행을 완료한 것이다. 이때 잔여업무 혹은 실행항목은 WBS에 업데이트하여 관리할 수도 있고, 별도로 엑셀과 같은 목록으로 관리할 수도 있다.   • 이슈 및 위험종료 계획수립 프로젝트 진행 도중 이슈 혹은 위험목록을 관리하고 있었다면 종료시점에서 이를 완료했다는 확인을 해야 한다. 종료시점까지 해결되지 않은 이슈나 위험 은 위에서 이야기한 잔여업무 혹은 실행항목에 통합해서 관리해도 무방하다.   • 비용 정산과 집행 계획수립 프로젝트를 종료한다는 것은 예산집행을 막는다는 것을 의미한다. 따라서 프로젝트와 관련하여 집행할 예산이 있다면 모두 집행해야 한다. 종료 이후 누락된 예산을 집행하기 위해서는 번거로운 행정절차를 거쳐야 한다.   • 인력해제 계획수립 프로젝트 팀원이 모두 동일한 날짜에 철수하기란 힘들다. 보통 몇 차례로 나누어 인력을 해제하는 것이 일반적이다. 인력철수는 고객이 민감하게 생각하는 이슈이기 때문에, 사전에 계획을 수립하여 고객과 합의를 해야 한다. 힘든 프로젝트를 끝낸 팀원들이 다음 프로젝트 투입 전까지 재충전을 할 수 있는 기간을 배려하는 것도 프로젝트 관리자가 해야 할 일이다.   • 전사 지원 요청사항 정리 프로젝트 이슈 해결을 위하여 프로젝트 수행조직의 지원부서에 요청할 내용을 계획한다.

profile picture

김병호

삼성 SDS 프로젝트 관리

SI 프로젝트를 끝내기 어려운 이유는 ?

모든 프로젝트는 끝내기 위해 시작하고 프로젝트의 끝에는 운영의 시작이 있다. 프로젝트와 운영의 경계가 명확할수록 프로젝트를 끝내기 힘들다. 프로젝트 수행과 운영의 회사가 다른 SI 프로젝트가 대표적인 예이다. SI 프로젝트에서는 프로젝트 종료이후에는 모든 업무를 고객사의 책임하에 수행하기 때문에 고객사는 다양한 이해관계자들의 요구사항을 충족한 후 운영에 필요한 문서를 확인하고 프로젝트 종료문서에 서명한다. 프로젝트 종료가 힘든 상황은 프로젝트 업무를 끝내기 힘든 상황, 종료에 대한 검수를 받기 힘든 상황, 운영으로 인수인계가 어려운 상황으로 구분할 수 있다. 참고로 ‘검수’란 프로젝트팀에서 이해관계자에게 업무에 대한 완료를 확인 받고 최종 승인을 획득하는 절차이고, ‘인수’란 운영조직이 프로젝트 팀으로부터 시스템 운영 전반을 이관받고 확인하는 절차이다.   1) 프로젝트 업무를 끝내기 힘든 상황   프로젝트 업무를 끝내기 힘든 상황은 종료 프로세스 관리로 대응하기 힘들며 평소 프로젝트 관리를 잘해야 문제를 해결하거나 부작용을 최소화 할 수 있다.   - 프로젝트 목표에 대한 공감대가 미흡함    프로젝트 목표는 종료를 판단할 수 있는 기준이기 때문에 이해관계자들의 그 목표에 공감해야 한다. 이해관계자들이 상충된 목표를 주장하면 프로젝트 종료는 정치게임으로 변한다. 옳고 그르고에 상관없이 잘못된 목표라도 이해관계자들이 공감해야 프로젝트 종료할 수 있다. 현실을 고려한 점진적인 개선과 이상적인 일괄개선을 주장하는 상충된 주장이 그 예다. 예들 들어 B2B 솔루션 기업에서 고객지원 시스템을 구축하기 위해서는 고객정보, 판매정보, 기술지원 정보를 통합하여 관리해야 하는데 수많은 기준정보의 정합성을 유지하는 것이 힘들기 때문에 일부 정보를 별도의 수작업으로 관리해야 할 수도 있다. 이러한 방식은 현실적이긴 하지만 자동화 되지 않은 프로세스, 부정확한 데이터의 중복 관리의 문제를 안고 있다. 만일 빅 마우스의 임원이 이러한 문제점을 프로젝트 후반부에 주장한다면 프로젝트 종료는 힘들어진다.     - 기술적으로 구현이 힘든 성능목표를 설정함 기술적으로 달성하기 힘든 요구사항을 설정하면 프로젝트 종료가 힘들다.  안면인식률, 지문인식률, 음성인식률 99.9%는 무척 달성하기 힘들 뿐만 아니라 목표달성을 위해 설계를 하면 다른 부작용도 발생한다. 육지나 강에 CCTV를 설치하여 적군의 침입을 탐지하는 보안시스템도 마찬가지다. 육지에서는 눈이나 비가 내릴 수도 있고, 강속에서는 다른 부유물이 있는 상황에서 동물과 사람을 정확하게 구분하는 것은 힘들다. 1990년대 미국의 덴버 국제공항은 완전 자동화된 수하물 처리 시스템을 구축하려 했지만  수차례의 프로젝트 지연 끝에 결국 자동화를 포기하고 기존의 수작업 분류 시스템을 유지해야 했었다. 기술의 한계를 인정하고 허용가능한 오차수준을 정해야 하는데 특정 개인의 정치적인 욕심으로 무리한 목표를 추구하는 이해관계자를 만나면 목표달성이 힘들다. 특히 현행만 유지해도 문제가 없다면 고객입장에서는 프로젝트 종료에 대한 압박이 없어 목표수준을 조정할 수 없고 이 때문에 프로젝트 종료가 더욱 힘들어진다.   2) 프로젝트 종료에 대한 검수가 힘든 상황   검수가 힘든 상황은 검수조직의 복잡함, 추가 요구사항의 발생이 대표적이다.   - 업무 종료를 확인하는 검수조직이 복잡함    동일 업무에 대해 종료를 확인하는 조직이 많아지면 검수조직 간에도 이견이 발생하여 프로젝트 종료도 힘들어진다. 예를 들어 공공기관을 대상으로 10개의 하위시스템을 구축하는 프로젝트에서 16개 시도의 업무담당자별로 종료를 위한 검수를 받는다면 160개의 종료확인서가 필요하다. 이런 프로젝트에서 고객사내 이견을 조정하고 검수를 리딩하는 조직이 없다면 프로젝트 수행조직에서 이러한 역할을 담당해야 하는데 프로젝트를 어떻게 종료할지 상상조차 힘들다.   - 프로젝트 종료시점에 추가 요구사항이 발생함     고객이 모든 요구사항을 상세하게 정의하는 것은 불가능하며 프로젝트 결과물이 분명해지는 종료시점에서야 모든 요구사항이 분명해진다. 특히 폭포수 방법론을 적용한다면 이해관계자들이 통합테스트에서 동작하는 시스템을 처음 접하기 때문에, 통합테스트에서 오류사항 뿐만 아니라 크고 작은 추가 요구사항을 요청한다. 종료시점에서 발생하는 요구사항은 요구사항에 대한 쌍방의 오해, 틀린 요구사항, 이해관계자의 변심으로 구분할 수 있지만 추가 요구사항이 어떤 유형인지는 쌍방의 생각이 다르다. 프로젝트 팀은 추가 요구사항을 많이 수용할수록 프로젝트가 지연되고, 고객사는 추가 요구사항을 반영하지 않으면 운영단계에서 보완해야 하기 때문에 조직의 이익을 대변하지 못했다는 질책을 받을 수 있다. 따라서 종료의 전제조건에 포함할 요구사항을 결정하는 이해관계가 첨예하게 대립되고 이러한 조정이 종료를 힘들게 만든다.     따라서 검수기준의 불명확은 정도의 차이가 있을 뿐이고, 어느 정도 선에서 절충할 것인가만 문제다. 고객사와 프로젝트 팀 모두를 만족시키는 절충방안은 존재하지 않는다. 고객사와 프로젝트팀 모두 역지사지의 관점에서 이 문제를 접근하면 좋겠지만, 현실은 그렇게 녹록치 않다. 최악의 경우에는 프로젝트 진행과정에서 모호하게 덮어두었던 모든 불씨들이 다시 살아나서 서로 얼굴을 붉히기도 한다. 물론 그때 절대적으로 불리한 입장은 프로젝트 팀이다.   - 종료감리 대응 종료시점에서는 결함제거, 여러 가지 개선요구 대응, 사용자 교육, 행정처리 등을 동시에 수행하느라 정신이 없다. 그 와중에 SI프로젝트는 종료감리까지 수행해야 하는 경우도 많다.감리에서 지적하는 내용들은 대부분 문서작업과 관련된 내용이다. 그 시점에서 프로젝트 팀원들은 문서작업이 아니라 기술적인 내용과 씨름하고 있기 때문에 문서작업은 프로젝트 팀원에게 또 다른 짐이 된다. 물론 프로젝트를 종료하고 안정적인 운영을 위해서는 필요한 문서가 있어야 하며, 그 내용 또한 정확해야 한다. 문제는 감리조직이나 감리인의 성향에 따라 프로젝트의 본질적인 내용과 벗어난 건수 위주의 지적을 할 수 있다는 것이다. 그것이 중요한 지적이든 아니든 검수에 대한 부담감을 줄이기 위해 고객사 입장에서는 외부 감리에서 지적한 내용을 모두 조치했다는 확인을 감리조직으로부터 받아야 종료검수를 시작하는 경우도 많다.   3) 운영을 위한 인수인계가 어려운 상황   운영을 위한 인수인계가 어려운 상황은 프로젝트 오픈 이후 안정화가 힘들거나 시스템을 운영할 준비가 미흡한 상황이 대표적이다.   - 시스템 오픈 후 사용자들의 VoC가 폭주함 프로젝트는 기존에 없던 것을 만들거나 변화하기 위해 시작하지만 변화를 좋아하는 사용자들은 없다. 프로젝트 결과물을 적용하는 초기에는 기존과는 달라진 프로세스, 익숙하지 않은 화면에 대한 사용자 VoC가 많이 발생한다. 프로젝트와 운영이 중첩되는 ‘안정화’의 시기는 짧을수록 프로젝트 종료가 쉬워진다.  프로젝트 품질수준이 낮다면 문제를 해결하는 개선활동이 또 다른 문제를 발생시키기 때문에 사용자 불만은 줄어들지 않아 이해관계자들도 프로젝트 종료를 승인하기 부담스럽다. 특히 프로젝트 결과물을 글로벌하게 적용한다면 프로젝트 적용 환경의 다양성, 사용자들의 다양성으로 예상하지 못했던 문제점들이 많이 발생하기 때문에 프로젝트 안정화 기간이 길어진다.     - 시스템을 운영할 준비가 미흡함 프로젝트 팀과 운영조직은 이해관계가 상충할 수 밖에 없다. 프로젝트 팀은 빨리 끝내고 싶지만 운영조직은 사용자들의 요구사항을 최대한 해결한 뒤 인수인계를 받고자 한다. 다른 사람이 개발한 시스템을 인수받아서 운영하는 것은 쉽지 않다. 운영에 문제가 발생하면 본인이 책임져야 하는 부담감 때문에 프로젝트 시스템을 충분히 이해했다는 자신감이 있어야 한다. 운영에 대한 자신감이 부족하면 이런 저런 핑계로 프로젝트 운영을 위한 인수인계를 미루게 된다.

재직자가 좋아한 글

Spring 면접 전 살펴보기 위한 Q&A 35가지 (2024년 ver)  |   1. 스프링 프레임워크란 무엇인가요? * 자바 엔터프라이즈 애플리케이션 개발을 위한 가장 널리 사용되는 프레임워크입니다. * 경량화, 제어 역전(IOC), 관점 지향 프로그래밍(AOP), 트랜잭션 관리 등의 기능을 제공합니다. 2. 스프링을 사용하면 어떤 장점이 있나요? * 경량화로 프레임워크로 인한 개발 오버헤드가 적습니다. * IoC 컨테이너가 객체 간 의존성 주입을 관리해줍니다. * AOP로 핵심 로직과 시스템 서비스를 분리할 수 있습니다. 3. 대표적인 스프링 하위 프로젝트들은 무엇인가요? * 스프링 코어: IoC/DI 등 프레임워크 핵심 기능 제공 * 스프링 JDBC: JDBC 코딩 없이 DB 연동 기능 * 스프링 ORM: JPA, Hibernate 등의 ORM 연동 계층 * 스프링 웹: 파일 업로드, 서블릿 리스너 등 웹 관련 기능 * 스프링 MVC: MVC 아키텍처 웹 개발 모듈 * 스프링 AOP: AOP 구현 및 메소드 인터셉터 정의 4. 의존성 주입(DI)이란 무엇인가요? * 객체를 직접 생성하지 않고, 생성 방법을 기술하면 IoC 컨테이너가 필요할 때 인스턴스화해서 주입하는 개념입니다. 5. 스프링에서 빈을 주입하는 방식에는 어떤 것들이 있나요? * Setter 주입 * 생성자 주입 * 필드 주입 * XML 또는 애노테이션으로 설정 가능 6. 빈 주입 방식 중 권장되는 방식은 무엇이고 그 이유는 무엇인가요? * 필수 의존성은 생성자 주입, 선택적 의존성은 Setter 주입을 권장합니다. * 생성자 주입을 사용하면 immutable 필드에 값 주입이 가능하고 테스트가 용이해집니다. 7. BeanFactory와 ApplicationContext의 차이점은 무엇인가요? * BeanFactory는 빈 인스턴스를 제공하고 관리하는 컨테이너 인터페이스입니다. getBean()이 호출될 때 lazy하게 빈을 생성합니다. * ApplicationContext는 BeanFactory를 상속하면서 애플리케이션의 모든 정보, 메타데이터, 빈을 담고 있는 컨테이너 인터페이스입니다. 기본적으로 애플리케이션 구동 시점에 eager하게 빈을 생성합니다. 8. 스프링 빈이란 무엇인가요? * 스프링 IoC 컨테이너에 의해 인스턴스화, 관리되는 자바 오브젝트를 말합니다. 9. 스프링 프레임워크에서 빈의 기본 스코프는 무엇인가요? * 별도 설정이 없다면 스프링 빈은 singleton 스코프로 생성됩니다. 10. 빈의 스코프는 어떻게 지정할 수 있나요? * @Scope 애노테이션이나 XML 설정 파일에서 "scope" 속성을 사용해 지정할 수 있습니다. * 스프링에서 지원하는 빈 스코프에는 다음과 같은 것들이 있습니다. * singleton * prototype * request * session * global-session 11. 싱글톤 빈은 스레드에 안전한가요? * 아니오. 싱글톤 빈 자체는 스레드 세이프하지 않습니다. * 스레드 안전성은 빈의 실행 방식에 달려 있고, 싱글톤은 생성 방식에 초점을 둔 디자인 패턴입니다. * 빈의 구현 코드에 따라 스레드 안전성이 결정됩니다. 12. 스프링 빈의 생명주기는 어떻게 되나요? * 빈 정의를 읽고 인스턴스화 → 의존성 주입 → 초기화 콜백 메소드 호출 → 사용 → 소멸 콜백 메소드 호출 → 빈 소멸 * 각 단계별로 초기화 메소드, 소멸 메소드 등을 빈에 적절히 설정해서 사용할 수 있습니다. 13. 스프링 자바 기반 설정이란 무엇인가요? * XML 기반 설정의 대안으로, 자바 클래스와 애노테이션을 사용해 설정하는 방식입니다. * 타입 세이프한 방식으로 스프링 애플리케이션 구성이 가능합니다. 14. 하나의 프로젝트에 여러 개의 스프링 설정 파일을 사용할 수 있나요? * 네, 가능합니다. 큰 프로젝트에서는 모듈화와 유지보수성을 위해 여러 개의 설정 파일 사용이 권장됩니다. * 자바 기반 설정에서는 @Configuration과 @Import 애노테이션을 사용해 여러 설정 클래스를 조합할 수 있습니다. * XML 기반 설정에서는 <import> 태그를 사용해 여러 XML 파일을 조합할 수 있습니다. 15. 스프링 시큐리티란 무엇인가요? * 스프링 기반 애플리케이션의 인증과 권한 부여 등 보안 기능을 담당하는 프레임워크입니다. * 스프링 시큐리티를 사용하면 인증/인가 관련 표준 로직을 작성하지 않아도 되고, CSRF 공격 등을 방어할 수 있습니다. * 웹 애플리케이션에 @EnableWebSecurity 애노테이션만 붙여주면 기본적인 웹 보안 기능이 작동합니다. 16. 스프링 부트란 무엇인가요? * 스프링 기반 애플리케이션을 빠르게 개발할 수 있게 도와주는 프로젝트입니다. * 단독 실행 가능한 스프링 애플리케이션을 쉽게 생성할 수 있습니다. * 내장 서버, 자동 설정, starter 의존성 등으로 최소한의 설정으로 개발을 시작할 수 있습니다. 17. 스프링 프레임워크에서 사용되는 디자인 패턴에는 어떤 것들이 있나요? * 싱글톤 패턴: 싱글톤 스코프의 빈 * 팩토리 패턴: BeanFactory 클래스 * 프로토타입 패턴: 프로토타입 스코프의 빈 * 프록시 패턴: 스프링 AOP * 템플릿 메소드 패턴: JdbcTemplate, HibernateTemplate 등 * 프론트 컨트롤러 패턴: 스프링 MVC의 DispatcherServlet * 데이터 접근 오브젝트(DAO) 패턴: 스프링 DAO 지원 18. 프로토타입 스코프는 어떻게 동작하나요? * 프로토타입 스코프로 정의된 빈은 매번 getBean() 메소드가 호출될 때마다 새로운 오브젝트를 생성해서 반환합니다. * 이는 기본인 싱글톤 스코프와 대조적입니다. 싱글톤은 IoC 컨테이너당 하나의 오브젝트만 생성합니다. 19. 스프링 빈에서 ServletContext와 ServletConfig 객체는 어떻게 얻나요? * 스프링에서 제공하는 Aware 인터페이스들을 구현하는 방법이 있습니다. * @Autowired 애노테이션을 사용해서 주입받는 방법도 가능합니다. 20. 스프링 MVC의 컨트롤러란 무엇인가요? * 스프링 MVC에서 사용자의 요청을 처리하는 컴포넌트입니다. * @Controller 애노테이션이 붙은 클래스가 컨트롤러의 역할을 합니다. * 컨트롤러 클래스의 메소드는 @RequestMapping 애노테이션으로 매핑된 특정 URI를 처리합니다. 21. @RequestMapping 애노테이션은 어떻게 사용하나요? * 요청 URL을 컨트롤러의 메소드와 매핑할 때 사용하는 애노테이션입니다. * URL 패턴 외에도 HTTP 메소드 타입, 헤더, 파라미터 등을 매핑 조건으로 지정 가능합니다. * @PathVariable을 통해 URL 템플릿 변수를 메소드 파라미터로 받을 수 있습니다. * @RequestParam을 통해 HTTP 요청 파라미터를 메소드 파라미터로 받을 수 있습니다. 22. 스프링 JDBC의 JdbcTemplate 클래스는 무엇이고 어떻게 사용하나요? * 스프링에서 JDBC 프로그래밍을 쉽게 할 수 있도록 제공하는 템플릿 클래스입니다. * 리소스 생성, 해지 등의 low-level 작업을 대신 처리해줍니다. * SQLException을 스프링 DataAccessException으로 변환하는 기능도 제공합니다. * JdbcTemplate을 사용하려면 DataSource를 스프링 설정 파일에 등록해야 합니다. 23. 스프링에서 트랜잭션은 어떻게 사용하고, 어떤 이점이 있나요? * 선언적 트랜잭션(@Transactional)과 프로그래밍적 트랜잭션(TransactionTemplate) 두 가지 방식을 제공합니다. * 선언적 트랜잭션은 코드 침투가 없고 AOP를 사용하기 때문에 권장됩니다. * 트랜잭션 전파, 격리 수준, 읽기 전용 등을 애노테이션 속성으로 제어할 수 있습니다. * 트랜잭션 경계를 메소드 단위로 설정할 수 있어서 productivity가 높아집니다. * 다양한 데이터 접근 기술에 대해 일관된 트랜잭션 제어가 가능합니다. 24. 스프링 DAO란 무엇인가요? * Data Access Object의 약자로, 데이터 접근을 추상화한 객체입니다. * 스프링은 일관성 있는 DAO를 작성할 수 있도록 다양한 기능을 제공합니다. * 저수준 예외를 스프링의 통일된 예외 체계로 변환해줍니다. * 템플릿 클래스를 통해 boilerplate 코드를 제거할 수 있습니다. 25. AOP(Aspect-Oriented Programming)란 무엇인가요? * 관점 지향 프로그래밍이라고 하며, 스프링의 핵심 기능 중 하나입니다. * 여러 객체에 공통으로 적용될 수 있는 기능(cross-cutting concern)을 분리해서 모듈화합니다. * 주로 로깅, 트랜잭션, 보안 등 인프라 레벨의 공통 기능을 구현하는데 사용합니다. * AOP를 통해 객체 간 결합도를 낮추고, 코드 재사용성을 높일 수 있습니다. 26. AOP에서 Aspect, Advice, Pointcut, JoinPoint란 무엇인가요? * Aspect: 여러 객체에 공통으로 적용되는 공통 관심사(cross-cutting concern)를 모듈화 한 것입니다. 트랜잭션 관리 등이 대표적입니다. * Advice: 특정 JoinPoint에서 Aspect에 의해 취해지는 조치입니다. Around, Before, After 등의 타입이 있습니다. * Pointcut: Advice가 적용될 JoinPoint를 선별하는 조건입니다. 주로 정규 표현식으로 표현합니다. * JoinPoint: Advice가 적용될 수 있는 위치입니다. 메소드 호출, 예외 발생 등이 있습니다. 27. AOP의 Weaving이란 무엇인가요? * Aspect를 타깃 객체에 적용해서 새로운 프록시 객체를 생성하는 과정을 말합니다. * 즉, Advice를 핵심 로직 코드에 삽입하는 과정입니다. * 컴파일타임, 로딩타임, 런타임에 적용할 수 있는데, 스프링 AOP는 런타임 위빙을 사용합니다. 28. 리액티브 프로그래밍이란 무엇인가요? * 데이터 흐름과 변경 전파에 중점을 둔 프로그래밍 패러다임입니다. * 주요 특징으로는 논블로킹(non-blocking), 이벤트 기반(event-driven), 느슨한 결합(loosely coupled), 확장성(scalable) 등이 있습니다. * Observer 패턴을 확장해서, 데이터 스트림을 비동기적으로 처리합니다. * 스프링에서는 5.0 버전부터 WebFlux를 통해 리액티브 프로그래밍을 지원하고 있습니다. 29. 스프링 WebFlux란 무엇인가요? * 스프링 5.0에서 추가된 리액티브 웹 프레임워크입니다. * 기존의 스프링 MVC와는 별개의 모듈로서 완전한 논블로킹 방식으로 동작합니다. * 네티(Netty)를 기반으로 동작하며, 서블릿 컨테이너에서도 동작 가능합니다. * 함수형 프로그래밍 방식을 지원하며, Mono와 Flux 타입을 사용해 리액티브 데이터 타입을 표현합니다. 30. Mono와 Flux란 무엇인가요? * 스프링 5의 리액티브 프로그래밍에서 사용되는 핵심 객체 타입입니다. * Mono는 0-1개의 데이터를 발행하는 Reactive Stream 구현체입니다. * Flux는 0-N개의 데이터를 발행하는 Reactive Stream 구현체입니다. * 모두 Reactive Stream 표준 인터페이스인 Publisher를 구현하고 있습니다. 31. WebClient와 WebTestClient는 각각 어떤 용도인가요? * WebClient는 스프링 WebFlux에서 제공하는 논블로킹 방식의 리액티브 HTTP 클라이언트입니다. * HTTP 요청을 비동기적으로 처리하며, Mono나 Flux를 사용해 응답을 받을 수 있습니다. * WebTestClient는 WebFlux 애플리케이션을 테스트할 때 사용하는 클라이언트입니다. * 실제 서버를 띄우지 않고도 mock request/response를 사용해 컨트롤러 테스트를 할 수 있습니다. 32. 리액티브 스트림 사용 시 주의할 점은 무엇인가요? * 리액티브 프로그래밍은 기존 방식과 사고의 전환이 필요해 진입장벽이 높습니다. * 리액티브 스트림을 디버깅하기 쉽지 않기 때문에 디버깅 방식에 대한 학습이 필요합니다. * 전통적인 JDBC 기반 DB 드라이버는 리액티브 방식을 지원하지 않아 사용에 주의가 필요합니다. 33. 스프링 5에서 리액티브 프로그래밍을 지원하기 위해 최소 자바 버전이 올라갔나요? * 네, 맞습니다. 스프링 5는 자바 8 이상에서만 동작합니다. * 자바 8의 람다, Stream API, CompletableFuture 등을 활용하기 위해 최소 사양을 올린 것으로 보입니다. 34. 스프링 5는 자바 9의 모듈 시스템(Jigsaw)을 어떻게 지원하나요? * 스프링 5의 프레임워크 라이브러리들은 자바 9 모듈 시스템을 따르도록 변경되었습니다. * 그래서 필요한 모듈만 선택적으로 가져올 수 있게 되었습니다. * 하지만 스프링 부트 2.0에서는 아직 자바 9 모듈을 완벽하게 지원하지 않습니다. 35. 스프링 MVC와 WebFlux를 함께 사용할 수 있나요? * 스프링 부트에서는 현재 둘 중 하나만 선택해서 사용하는 것을 권장합니다. * 왜냐하면 둘 다 사용하면 자동 설정이 제대로 동작하지 않기 때문입니다. * 또한 스프링 MVC는 서블릿 기반인 반면 WebFlux는 네티 기반이라 함께 사용하기에 적절치 않습니다. 출처 : https://www.baeldung.com/spring-interview-questions

좋아요 476 저장 1190

thumbnail