본문 바로가기

Activities

[부트캠프] 소프티어 부트캠프 2기 iOS 수료 후기 : ]

 

안녕하세요.

저는 2023년 07월 ~ 08월 2달간 소프티어 부트캠프 iOS 활동을 수료했습니다. 이전 포스트에서 1차 코딩테스트, 2차 소프트웨어 지식 테스트 후기1주차 활동하면서 느낀 경험을 작성했는데요. 이번 포스트는 부트캠프를 수료하면서 활동했던 경험을 공유하려고 합니다.

지원 동기

학교 다니면서 iOS 공부를 같이 병행했습니다. 꾸준히 iOS 개발과 공부는 하고 있는데 앞으로 어떻게, 무엇을 주제로 iOS 공부를 해 나가야 더 좋은 개발자로 성장하고 인정받을 수 있을지 제일 큰 고민이었습니다. 그 외에도 iOS 개발하면서 해결하지 못한 궁금증들은 쌓여만 갔습니다.

 

소프티어 활동은 서울 한양대학교에서 대면으로 했었는데요. 저는 대전에 거주하지만, 이번 부트캠프에서 위의 내용에 대한 해결방안을 해결하고 더 다양한 사람들을 만나 새로운 개념들을 배울 수 있겠다는 생각이 들었습니다. 서울에 당장 거주할 곳은 없었지만 그래도 도전해서 경험을 쌓아보고 싶었습니다.

코딩테스트,  지식테스트

1차 코테는 정말 신선한 문제들이 많았음을 느꼈습니다. 2차 지식테스트에선 CS지식이 나왔는데요. 이와 관련된 개념들은 이때 마침 학교에서 관련 개념들을 공부하고 있어서 자신 있게 푼 것 같습니다. 자세한 경험은 위에 소개 부분에 링크에 달았습니다.

7월 ( JK iOS 마스터님과 iOS 동료들과 함께: )

7월 한달은 소프티어 부트캠프 iOS 동료들, JK iOS 마스터님과 함께했습니다.

 

기존에 학교에서 접한 C++, java.. 객체 지향 언어와 프로그래밍을 조금 배웠었는데 이번에 좀 더 깊게 OOP에 대해 파고들었고 protocol, 객체 간 loosely coupling 등등 정말 자세하게 탐구하고 적용할 수 있었습니다.

부트캠프 활동에서 매일 기능 요구사항이 있었습니다. 분위기는 모든 요구사항을 모두 완수하기보다 특정 요구사항에 대해 그룹원, 동료들과 함께 대화하고 더 깊이 있게 파해쳐나가는 분위기였어서 다양한 실험과 개념 학습 후 적용도 할 수 있었습니다.

 

iOS 앱 개발에 대해 더 많고 다양한 개념들을 iOS 동료들과 함께 탐구하고 토론을 했었는데 정말 재밌었습니다. 이전에 공부하면서 궁금했던 개념이나 키워드가 많았고 그룹원, 동료들에게 대화 주제로 다 같이 의논하고 고민하고 해결했습니다.
JK 마스터님한테도 질문하면서 많은 궁금증을 해결해갔습니다. 일주일에 두 번 JK님이 iOS 프레임워크 관련해서 개념들을 알려주셨는데 자료 퀄리티가 대박이었고 많이 배웠습니다. 기본 개념을 기반으로 더 자세하게 공부해야 할 개념들을 알게 되어 기뻤습니다. 

 

QnA시간도 있었습니다. 익명으로 질문을 남기면 JK 마스터님이 자세하게 알려주셨고 프로젝트하면서 그리고 평소에 궁금했던 개념들을 해결할 수 있었습니다.

 

iOS 컨퍼런스 KWDC도 JK 마스터님과 현대/기아 기업의 지원 덕분에 경험할 수 있었습니다.

 

Git!! 체리픽이랑 리베이스 개념을 새롭게 알게 되었습니다. 친절한 iOS 동료 형이 진짜 친절하게 알려주었기에 개념을 잡아갔는데 크으.. iOS 동료들 실력이 다들 대단하다고 느꼈습니다. 처음 접하는 프레임워크를 공부하고 적용하면서 기능을 구현해 나가는 동료들도 있었는데 대단하다는 생각이 들었습니다.

 

iOS동료들과 저녁먹고~ 캐치가서 공부하고~~ 좋은 추억과 경험을 쌓았습니다. 여러 대화를 하며 다양한 경험을 한 iOS 동료들의 얘기를 들으며 저도 더 열심히 해야겠다는 의지가 더 생겼습니다. 한 달 동안 진행하는 활동이었지만, 지금이 주어진 마지막 기회라는 생각에 욕심이 생겼습니다. 잠을 줄여 약 한 달 절반 이상 정도의 느낌처럼 열심히, 재밌게 iOS를 공부했습니다.



cf. 순수하게 iOS 공부, 개발 시간을 기록했었습니다. 강의나 세션 시간은 제외입니다!! ( 좌 우로 스크롤 )

8월 [한 달] 팀 프로젝트. H1 My Car DeepDive팀?!!

8월 달은 특정 주제를 기반으로 기획자가 기획하고 디자이너분들이 디자인 해준 피그마의 UI를 프론트엔드, 백엔드, iOS, 안드로이드 여러 파트에서 랜덤으로 팀을 이루어 팀 프로젝트를 하게 되었습니다. 저는 iOS 2, FE 2, BE 2 총 6명이 팀을 이루어 개발하게 되었습니다.

 

프론트 팀원들과 같이 화면 스토리도 짜고, 백엔드 팀원들과 api 연결을 위한 소통, 추가적으로 발생가능한 경우에 대해 FE, BE, iOS에서 서로 의논을 통한 합의점 + 발생가능한 새로운 경우를 지정하면서 협업과 소통에 대한 경험을 쌓았습니다. 결과적으로 초기에 지정한 피그마에 정의된 모든 화면과 기능을 구현했습니다.

 

프론트분들 정말 실력 좋고 섬세하고 백엔드 분들은 사용한 기술들이 대단하다고 느꼈습니다.

 

사용자가 터치할 때 동적으로 뷰의 높이 변화 처리를 어떻게 해야 할지 가장 궁금했었는데, iOS 팀원 형이 솔루션을 제공해 주었습니다. 의외로 정말 간단하게,, 특정 view의 height anchor를 참조하는 프로퍼티를 통한 것이었습니다.

사용자의 특정 이벤트 발생시 참조 중이던 height cosntraint property의 height constraint를 업데이트하고 상황에 따라 비동기적으로 다음 UI update cycle에 업데이트할 것인지 아니면 layoutIfNeeds()로 바로 layoutSubviews를 호출할 것인지로 constraint를 업데이트하면 되는 것이었습니다: ) iOS 팀원 형으로부터 화면을 구현하는 여러 방법을 공유하고 배웠습니다+_+

 

그리고 이번 프로젝트에서 팀원이나 다른 개발자를 위해 어떻게 코드를 쉽고 재사용 가능하게 짜야하는지에 대한 역량을 증진시켰습니다.

아래 부분은 넘어가도 되는 부분입니다. | 뷰 다형성 + 한 가지 고민과 해결 경험( 간단하게 개인 기록.. )

그림1

 

cf. 지금 여행 관련 앱, 서비스를 개발중인데 데이터는 정말 귀중한 자산임을 느겼습니다. 원하는 데이터를 사용하기 위해서는 발생가능한 많은 금액을 지불해야만 사용할 수 있기 때문입니다.. 

이번 프로젝트는 현대자동차에서 제공된 관련 데이터를 활용해서 화면을 만들었는데, 보안관련해서 당부 말씀이 있어서 요롷게 가렸습니다!!

 

그림 1과 같이 왼쪽, 오른쪽 두 화면을 구현할 때 공통으로 위치하는 subviews를 복사 붙여 넣기를 통해 새로운 커스텀 view의 내부 변수들로 정의하지 않고 사용할 수 있을지!!!! 무척 고민했습니다. 이 고민은 이전부터 정말 많이 했었고 궁금증으로만 남았었습니다.

 

프로젝트 기간에 중간에 서로의 기술 공유하는 시간이 있었고 iOS 동료로부터 이 고민을 해결할 것 같은 방법을 소개받았습니다. 저 또한 7월달에 학습했던 경험인 POP와 OOP를 더욱 파고들며 UIView가 class타입이라는 점과 + protocol을 활용해 해결할 수 있었습니다. 정말 값진 경험을 하게 되었습니다.

 

이번 부트캠프 활동 전에는 위 그림1의 왼쪽 화면, 오른쪽 화면에 대해 왼쪽, 오른쪽 객체를 두 개 각각 다른 커스텀 뷰 객체로 정의했습니다. ABaseOptionDetailRoundView, BBaseOptionDetailRoundView 이런 느낌입니다.

 

왼쪽 뷰 클래스에서 subview로 이미지 뷰 선언, 컨텐트 뷰 선언, 각각 레이아웃 잡고!!

오른쪽 뷰 클래스에서 subview로 이미지 뷰, 컨텐츠 뷰, 카테고리 뷰, 페이지 뷰 선언 + 각각 레이아웃 잡을 것입니다.

 

여기서 중복되는 코드는 이미지뷰, 컨텐트뷰이고 상황에 따라서 컨텐트 뷰 아래에 카테고리 뷰가 부가적으로 추가되는 경우가 있었습니다. 이때 더 최소한으로 설계하자면, BaseOptionDetailRoundView라는 큰 뷰 안에 같은 영역의 배치는 이미지 뷰ContentView(그림 1에서 왼쪽의 경우 초록 영역, 오른쪽의 경우 남색 영역)입니다. 그래서 이 두 개는 BaseOptionDetailRoundView 안에 auto layout으로 배치했습니다.

이때 ContentView는 UIView + protocol(특정 행동) 타입의 추상, 상위 뷰 타입으로 정의합니다. 중요한 게 UIView!! 크으.. 그리고 BaseOptionDetailRoundView에서 contentView는 상황에 따라 외부에서 주입된 구체타입 객체의 특정 protocol을 delegate로써 실행합니다. 이를 주입하는 객체타입에는 특정 protocol을 준수하고 contentView 내부에 배치될 하위 뷰들을 정의하고 특정한 뷰가 실행될 메서드를 구현하면 됩니다. 이제 7월달에 미쳐 보지 못했던 프로젝트나 코드를 틈틈이 시간내어 파해치면서 더 공부해 볼 생각입니다: )

 

그리고 또 고민했던 것은 만약 서버에서 제목 영역은 최대 1~2줄, 소제목 1줄, 내용 1~5줄이 maximum으로 온다고 가정했을 때 어떻게 높이를 측정할 것인지 그리고 각각의 Maximum height를 적용해 줄 것인지 고민했었는데 언제 content hugging을 써야 하는지, 언제 compression resistance(모든 뷰들이 지정된 content보다 커질 수 있는 경우) 우선순위를 정해줘야 하는지를 명확하게 알게 되었습니다. lessThanOrEqualTo에 대해서도 자세히 알게 되었습니다.



cf. 순수하게 iOS 공부, 개발 시간을 기록했었습니다. 강의나 세션 시간은 제외입니다!! ( 좌 우로 스크롤 )

프로젝트 발표까지!!!

소프티어 부트캠프 팀들 모두가 프로젝트를 열심히 개발했다는 열정이 느껴졌습니다. (우리 팀 저도 그렇지만 iOS 팀원 형도 진짜 많은 시간과 열정을 투자했었습니다.)

 

저는 평소에도 발표를 어려워했었는데,, 이번 기회에 도전해보고 싶었고 발표도 했습니다.
발표와 프로젝트를 기반으로 우승한 팀들도 있었습니다.(부럽..)

 

각각의 팀은 프로젝트 발표 후 현대자동차/기아자동차 면접관분들의 QnA가 이어졌습니다. 질문 난이도가 엄청 높고 예리하다는 것을 느꼈고 인상 깊었습니다. 

 

여담.

지금 캡스톤 디자인과목으로 대학 학우들과 개발 중인 iOS 여행 관련 앱에서 '추천'이라는 서비스가 있습니다. 이 서비스는 open ai를 활용해서 구현 중인데, 단순히 open ai를 활용했다에 의의를 두어선 안 되겠다는 생각이 번쩍 들었습니다.

인적성 검사/AI 면접 그리고 최종 면접까지..

최종 면접 때는 청심환을 3시간 전에 흔들어서 먹는 게 좋다고 해서 처음으로 먹었는데 더 떨리는(+긴장) 듯한 느낌이었습니다. 면접을 회상하면 "이렇게 말하는게 더 좋았을 텐데" 라는 대답이 막 떠오르는데,,,, 그래도 최고의 경험이었습니다😆

 

더 열심히 해야지+_+

진짜 최종 후기

이번 부트캠프하면서 iOS 기능설계, UI개발은 경험은 당연히 쌓을 수 있었습니다. 같은 주제를 가지고 iOS 동료들과 대화할 수 있음에 정말 좋았고 JK님한테 배울 수 있어 기뻤습니다.


협업 경험도 한 층 성장을 한 것 같습니다.

7월달에 매주 프로젝트할 때 1주일 간 제가 기능은 정말 많이 구현했는데,  3분이라는 시간 내에 ppt로 만들어 발표해야 했습니다. 어느 부분을 어떻게 어필을 하면 좋을지.. 이것도 정말 어렵고 요점을 시각화해서 발표하는게 중요하다는 것도 알게되었습니다.


인적성검사, AI면접, 면접에 대비해 유튜브로 공부하는 시간도 갖게 되었습니다.
현대 자동차 기업의 SDV 비전과 모빌리티 개념을 알게 되었습니다. Software와 iOS 앱 개발자의 선택에 후회보단 시야가 더 넓어졌고 또 도전하고 싶어졌습니다: ]

 

JK님이 중간 중간 알려주신 책이랑 제가 평소에 공부하고 싶었던 POP 책들을 구매했습니다(호호). 모듈화도 해보고 싶고 새롭게 배워야 할 UIKit 기술들과 책도 열심히 읽어나가야겠네요.

 

 

소프티어 부트캠프 강추입니다. 완전 강력 추천!

 

질문이나 궁금한 사항에 대해 댓글 환영입니다. 근데 인적성/AI면접, 면접에 대한 정보는 알려드릴 수 없습니다. 기업 보안입니다!!