Project.다원 Ensemble_개발(3)_템플릿 제작 진행


음.. 어제 좀 피곤했던일이 있어서 많은 진척은 없지만, 템플릿을 깔짝 손봤습니다.

아무래도 Bootstrap 기반으로 만들다보니 Bootstrap의 느낌이 나네요. (그런 느낌?!)

 


1. Front단 - 템플릿 제작 진행 중

 - PC에서 봤을 때

PC Version

 

 - Mobile에서 봤을 때

Mobile Version

 

아마 메뉴부분은 저번에 만든 Wireframe을 기반으로 만들어보겠지만, 아마도 조금씩 변동사항은 생길것같네요.

메뉴 구성 Wireframe 부분은 아래 게시판으로 이동하시면 볼 수 있습니다. (링크)

 

Project.다원 Ensemble_설계(4)_장비관리 Wireframe(0) (SiteMap 추가!)

Project.다원 Ensemble_설계(4)_장비관리 Wireframe(0) (SiteMap 추가!) 오늘은 약속대로 ER-Diagram의 다음 작업인 Wireframe입니다! 음.. 11시에 시작은 했는데 (집 도착해서 밥먹고 씻고 준비하면 대략 이런시..

karzin.tistory.com

아무래도 밑바닥부터 개발을 디자인과 병행하여 진행을 하다보니 여기서 시간이 좀 걸리지않을까 싶습니다.ㅠㅠ

 

2. Back단 - Class 골격 잡기 진행 중

현재 VO Class는 다 만들어진 상태이고,

Controller / RestController의 구조잡기가 한창입니다.

아마 DB연동하는 부분의 Class(Service, Mapper)는 조금 나중에 진행이 될 듯 합니다.

 

모든 VO객체의 개발은 완료

 

VO객체는 뭐.. Getter/Setter 만들어 주는거 말고는..


요즘 잠을 더 줄였더니 엄청 피곤하네요;;;

어제 불토라고 늦게까지 코딩이랑 공부랑 조금했더니 아마 그게 문제가 된 듯 합니다 ㅋㅋㅋ;;;;;

개발하는 내내 피곤한 상태라서 아마 내일은 조금 쉬고올까 합니다.

(간만에 컴퓨터 안하는 날?!)

오늘은 이르지만 좀 일찍 잠을 청해야겠습니다.

 

다음 시간에는 제가 RestController 부분에 넣어보고 싶은 기능이 있어 기능검토좀 들어가볼까 합니다.

속도면을 조금 올려줄 수 있을 방법같은데 어떨지 모르겠네요.

 

 

버전정보 (v1.0)

 - v1.0 2020.07.19 배포

 

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Project.다원은 개인(karzin)이 기획, 분석, 설계, 디자인, 개발, 유지보수 등

모든 부분을 혼자 맡아 진행하는 개인 프로젝트입니다.

Project.다원 Ensemble

Karzin

abbeea@naver.com


Project.다원 Ensemble_기능검토(1)_QRCode (Sequence Diagram)


얼마전 저는 장비관리에 QRCode 기능을 넣을 생각을 했습니다. (Project.다원 Ensemble_개발(0)_사전 준비)

 

Project.다원 Ensemble_개발(0)_사전 준비

Project.다원 Ensemble_개발(0) 사전준비 Class Diagram을 만들기 전에 사전작업으로 개발을 위한 준비를 시작했습니다. 개발시 필요한 IDE 및 컴포넌트들을 다운받는 것이었는데, 생각보다 양이 많더라구

karzin.tistory.com

어떻게 넣을까 고민을 하며 찾아본 결과 구현 가능성이 높아졌고, 제대로된 기능검토가 필요하다고 생각이 들어서 준비했습니다!


QRCode의 생성방법 두가지

QRCode를 생성하는 방법으로 크게 잡아보자면 두가지 방법이 있습니다.

첫번째는 jQuery(Front단)를 이용해 만들어버리는거고, 두번째는 java(Back단)를 이용해 만드는 방법입니다.

둘의 차이는 서버를 경유하냐 마냐의 차이가 되겠습니다.

 

 - 1. Web-jQuery (Front)

  -> qrcodejs - (https://github.com/davidshimjs/qrcodejs)

  -> License : MIT License

  -> 장점 : 서버를 경유하지 않아 개발자인 제가 편리, 서버가 연결되지 않아도 QRCode의 생성 가능

  -> 단점 : 유저가 클릭을 할 때마다 브라우저에서는 QRCode를 만들어내야함. 

 

 - 2. Java (Back)

  -> ZXing Core - (https://github.com/zxing/zxing)

  -> License : Apache 2.0

  -> 장점 : 한번 생성을 해두고 image로 만들어두면 반복된 사용이 가능, front단의 부하를 줄일 수 있음

  -> 단점 : Java단에서 구현을 해야하고(즉, 코드의 수정이 필요한 경우 서버의 배포가 필요.), 이미지를 계속해서 관리를 해주어야함. 개발자인 제가 귀찮아짐.

 

 

그렇다면 선택은?

고민은 3초정도 했고, 결과적으로 Java소스 기반의 ZXing Core를 사용할겁니다.

서버에서 QRCode를 한번 이미지로 만들어두면 계속된 재사용이 가능하고, 이미지만 뿌려주면 되다보니 구형PC든 뭐든 어디서든 바로바로 확인이 가능하기 때문에 프린팅도 금방할거라 판단되었습니다.

Front단에서 만드는 QRCode도 그닥 오랜시간은 걸리지 않겠지만, 혹시라도 구형 태블릿을 활용하시는 분들이 불편할 수 있을 것 같아서 내린 판단입니다.

그리고 Front단을 포기하게 만들게된 결정적인 사항중에 하나입니다만,

ZXing를 사용하면 저에겐 굉장한 이득이 있습니다!

바로 추후 고려중인 Android NativeApp(장비관리)에 소스를 이식 시킬 수 있다는 것이죠. (!!!!!)

이런게 바로 일석이조 아니겠습니까 (잔머리만 잘 굴리네요ㅋㅋㅋㅋ)

 

 

QRCode 생성-Sequence Diagram

QRCode 생성-Sequence Diagram

* 위 이미지에 들어간 글씨체는 네이버 나눔 글씨체인 나눔스퀘어 Bold를 사용했습니다.

* 위 이미지에 들어간 내용은 전부 (픽토그램 등) 직접 제작했음을 명시합니다.

 

우선 Exception에 대해서는 고려하지 않았습니다.

한가지 고려를 해보자면 그럴일은 없어야 하지만, DB저장까지 완료되었는데, QRCode 생성할때 Exception이 일어나면 어쩔것인가? 라는 질문에 대한 답변에는 일단 그런 경우가 생기면 안되겠지만 만일 일어난다면 QRCode는 생성하지 않게 합니다.

데이터의 저장은 완료되었으나, QRCode만 생성은 안되는 것이죠.

그럼 QRCode는 버리는것인지? 아닙니다.

추후 user가 QRCode를 확인하는 페이지에 방문을 하면 만일 QRCode가 생성이 안되어 있는 경우 생성을 하게 만드는 것이죠.

 


오늘은 그간 검토해본 QRCode에 대해서 파악을 해보았습니다.

시간적 여유만 된다면 Front, Back 둘다 구현은 해보고 싶네요 ㅋㅋㅋ

오늘은 불토입니다! 이제 소스나 신나게 구현해야겠습니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

버전정보 (v1.0)

 - v1.0 2020.07.18 배포

 

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Project.다원은 개인(karzin)이 기획, 분석, 설계, 디자인, 개발, 유지보수 등

모든 부분을 혼자 맡아 진행하는 개인 프로젝트입니다.

Project.다원 Ensemble

Karzin

abbeea@naver.com

 


[Swift5] navigationController에서 뒤로가기 기능 만들기


navigationController에서 navigation의 back버튼처럼 UIButton에 뒤로가기 기능을 만들어야하는 경우가 있습니다.

이런경우 어떤식으로 코딩하면 될지를 알아보겠습니다.

 


코드

코드 자체는 굉장히 심플합니다.

@IBAction func onClick_btn_back(_ sender: Any) {
	self.navigationController?.popViewController(animated: true)
}

popViewController 함수를 사용해 현재 View를 Stack의 pop처럼 꺼냅니다.

해당 함수를 사용하면 navigation에 있는 뒤로가기 버튼과 같은 이벤트를 만들 수 있습니다.

(맨 위에 쌓여있는 View를 Pop합니다.)

animated 매개변수는 말그대로 뷰가 제거될때의 애니메이션 유무입니다.

 

 

Ref - Apple Developer Documentation

https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621886-popviewcontroller

 

Apple Developer Documentation

 

developer.apple.com

 


버전정보 (v1.0)

 - v1.0 2020.07.17 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.co


Project.다원 Ensemble_개발(2)_Spring Boot 세팅 완료


솔직히 Spring Boot 세팅은 워낙 어려운게 없다보니 오래걸리지는 않았네요 ㅎ

오늘 작업 내역입니다!


1. Spring Boot 세팅 완료

localhost에서 테스트

MainController를 생성해서 테스트 진행했습니다.

localhost에서 문제 없이 나오는걸 확인!

 

 

2. Spring Boot - MariaDB 연동 완료

mariadb.jdbc

 - 특이사항

  -> connector는 mariadb.jdbc를 사용했습니다.

  -> 아실분들은 아시겠지만, MySQL Connector의 License는 GPL 2.0입니다. 

MySQL Connector - GPL 2.0

  -> 그리고 MariaDB jdbc의 License는 LGPL 2.1입니다.

MariaDB Client - LGPL 2.1

  -> GPL License가 나쁜건 아니지만, 아무래도 GPL보다는 자유성이 높은 LGPL 2.1을 채택했습니다. (이왕 GPL보다는 LGPL이..)

 

 

3. 내부 구조세팅 완료

코드들이 들어갈 구조잡기 완료

추후 어차피 만들 부분들 포함해서 구조를 잡아뒀습니다.

이제는 제대로된 로직만 들어갈 일만 남았네요.

 

4. 개발을 좀 더 편리하게 - devtools 추가

 

devtools 추가!

코드가 바뀌면 알아서 재실행(바로 적용)하도록 설정하기 위해서 추가해두었습니다. 

 


세팅은 뭐.. 오류날일이 없는 작업이고 거의 노가다성이다보니 금방 마무리된 것 같네요.

 

참고로 maven dependency 추가할때 아래 페이지 참고하시면 편리(검색, 라이센스 파악 등 용이)합니다. (링크-Maven Repository)

 

Maven Repository: Search/Browse/Explore

N2o API Last Release on Jun 30, 2020

mvnrepository.com

어제 말한 순서에서 이제 개발 시작이 남았습니다. (이미 시작했지만..ㅋㅋㅋ;;)

 -> Spring 환경 구축 -> DB연동작업 -> 개발 시작 -> (프로토타입)테스트

 

내일은 개발도 개발이지만, 기술검토 몇가지 해야할게 있어서 그런 부분들 정리해볼 예정입니다.

 

 

버전정보 (v1.0)

 - v1.0 2020.07.17 배포

 

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Project.다원은 개인(karzin)이 기획, 분석, 설계, 디자인, 개발, 유지보수 등

모든 부분을 혼자 맡아 진행하는 개인 프로젝트입니다.

Project.다원 Ensemble

Karzin

abbeea@naver.com

 


[Swift5] 에러해결 : unable to dequeue a cell with identifier ~


iOS 어플 개발 테스트 중 화면이 뜨지 않고 이러한 에러를 만날때가 있습니다.

unable to dequeue a cell with identifier ~

저의 경우 TableView를 건들다가 일어난 문제였는데요, 어렵지 않게 해결할 수 있으니 당황하지 않으셔도 됩니다.


원인

해당 에러가 발생한 경우 원인은 보통 Storyboard 혹은 nib에서 identifier을 지정해주지 않았거나,

identifier에 지정된 명칭이 코드와 Storyboard단에서 서로 상이해서 발생하는 문제입니다.

 

해결

해결 방법으로는 Storyboard에서 코드와 연결될 identifier을 지정해주거나 혹은 변경해주는(코드단과 동일하게 해주는)겁니다.

 

Storyboard Identifier 지정 위치 : 

Storyboard - Show the Attributes inspector 아이콘클릭 후 나오는 항목들 중 Identifier input box에서 지정

 

Storyboard에서 Identifier 지정해주기

저의 경우 TableView의 Cell을 지정할때 Storyboard와 코드단에서 사용할때의 Identifier이 서로 상이하여 찾지 못해 일어난 문제였습니다.

 

버전정보 (v1.0)

 - v1.0 2020.07.16 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com


Project.다원 Ensemble_개발(1)_DB 구축 및 TABLE 생성


오늘부터 개발 시작이니 진행한 부분 들고왔습니다.

오늘은 DB구축하고 TABLE 생성 및 관리용 사용자 추가 및 권한부여 하였습니다.

아까 변경된 공통코드의 ER Diagram과 Class Diagram 게시글 올리고나자마자

샤워하고 바로 DB작업 진행하다가 어디선가 벌레가 나타나는바람에 조금 늦어졌네요 ㅠㅠ;;;;; (벌레 싫어... 한 40분 날려먹었...)

 


DB 툴을 쓸까하다가 오늘은 귀찮아서 그냥 Console로 작업했습니다.

저는 그냥 Console이 편해서........ (어줍잖은 무료 툴 쓰느니 차라리...)

특히 저는 vim계열을 아직까지도 좋아해서 ㅋㅋㅋㅋㅋㅋㅋ

1. DB 구축

show databases;

데이터베이스 명은 dawon_erp_ensemble로 만들었습니다.

 

2. TABLE 생성

show tables;

 - common_code : 공통코드

 - employee : 사원 (임시)

 - equip_status : 장비 정보

 - equipment : 장비

 - file : 파일

 - project : 프로젝트 (임시)

 

3. 관리용 사용자 추가 (Back-End단에서 연결에 필요한 계정)

select user from user;

 - dawon

 - ensemble

 두개의 테스트 계정 추가. 일단은 테스트용으로 진행하고 추후 연동시 user는 변경될수도 있습니다~

 

 


솔직히 DB 구축하는거 어려운것도 아니거니와, table 생성하는거야 이미 설계 문서가 있는 만큼 많은 시간 들일 필요없이 금방 끝냈습니다.

단지 위에서 말한거처럼 벌레가... 으아!!!! (흐름 다 끊기고 ㅠㅠㅠ)

자취생에게는 벌레가 아무리 익숙하게 보여도 익숙하지가 않네요..ㅠㅠㅠ (이젠 어디서 '딱딱' 소리만 들려도 바로 천장부터 확인하는...)

특히 밤 늦게까지 불을 켜놓고 작업을 해서 그런지 딱정벌레(?)류가 자꾸 어디서 기어들어오네요.ㅠㅠㅠㅠㅠㅠㅠ

 

어쨌든 DB는 금방 마무리 되었고, 이제는 저번에 다운로드한 IDE(Eclipse)에 Spring 환경만 구축해주면 될 것 같네요!

 -> Spring 환경 구축 -> DB연동작업 -> 개발 시작 -> (프로토타입)테스트

이제 나머지는 위 순서로 진행하면 될 것 같고, 개발은 아마 설계자료가 있는 만큼 금방 마무리 되지 않을까 싶네요.

 

작업하며 참고한 설계 문서

 - Project.다원 Ensemble_설계(3)_장비관리 ER Diagram

 

Project.다원 Ensemble_설계(3)_장비관리 ER-Diagram

Project.다원 Ensemble_설계(3)_장비관리 ER-Diagram 어제 장비관리 프로세스를 작성을 하고, 머릿속에 있는동안 얼른 정리해버리자 해서 ER-Diagram을 작성했습니다. ER-Diagram의 작성은 여느때처럼 PPT를 이�

karzin.tistory.com

 - Project.다원 Ensemble_설계(9)_장비관리 Class Diagram

 

Project.다원 Ensemble_설계(9)_장비관리-Class Diagram

Project.다원 Ensemble_설계(9)_장비관리-Class Diagram 휴.. 밥먹고나서 샤워하고 부지런히 만들기시작해서 드디어 끝났습니다! (지금시각 1시 4분) 후반부로 갈수록 졸림이 심해져서;; 겨우겨우 참고 마��

karzin.tistory.com

 - Project.다원 Ensemble_설계(10)_공통코드 ER Diagram, Class Diagram

 

Project.다원 Ensemble_설계(10)_공통코드-ER Diagram, Class Diagram

Project.다원 Ensemble_설계(10)_공통코드-ER Diagram, Class Diagram 흠.. 어제 장비관리 Class Diagram을 올리면서 생각했지만, 공통코드 부분의 ER Diagram이 어떻게 설계가 되었는지 설명한적이 없는것 같..

karzin.tistory.com

 

 

버전정보 (v1.0)

 - v1.0 2020.07.16 배포

 

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Project.다원은 개인(karzin)이 기획, 분석, 설계, 디자인, 개발, 유지보수 등

모든 부분을 혼자 맡아 진행하는 개인 프로젝트입니다.

Project.다원 Ensemble

Karzin

abbeea@naver.com


[Swift5] 특정 View만 화면 회전 (UINavigationController)


아까 공부하러 간다고 말씀을 드렸습니다만.. 오늘의 공부는 바로 iOS(Xcode-Swift)공부였습니다. ㅋㅋㅋ

 

iOS개발을 하다보면 가끔 특정 View에서만 화면을 회전해야하는 경우가 있습니다.

예를들어 가로->세로->가로로 하나의 화면을 세로로 보여야한다던가,

세로->가로->세로 등의 화면으로 보여줘야한다는 등 특정한 요구가 있는 경우가 있습니다.

 

그런 경우 코드로 어떻게 처리를 하는지를 알아보겠습니다.

 

특히 제가 사용하는 소스의 경우 UINavigationController가 적용된 UIViewController에서 강제적으로 화면을 회전시키는 소스입니다.

뭐, 다른 방법이 있을 수 있으나..(supportedInterfaceOrientations를 이용해 변경을 해보려했는데 잘 되지 않더군요. 저의 방법이 잘못된거일지도 모르겠지만, 대략적인 느낌은 전역으로 지정된 UINavigationController 혹은 제가 커스텀한 CustomUIViewController가 override된 supportedInterfaceOrientations를 무시하는 것 같았습니다.)

한동안 삽질을 하던 저는 이 방법을 통해 해결하였습니다.

(더 좋은 방법이 있다면 알려주시면 감사하겠습니다! 감사히 배우겠습니다!!)


 

우선 이 코드를 이해하기 위해서는 viewWillAppear 함수와 viewWillDisappear 함수에 대해 대강 이해하고 계셔야합니다.

이 함수들을 이해하기 위해서는 View Controller의 생명주기에 대해서 알고 계셔야 이해가 쉬운데요.

이 부분은 나중에 다시한번 다루도록 하겠습니다. (... 시간관계상)

 

간단히 말하면 viewWillAppear 함수와 viewWillDisappear 함수는 뷰의 생명주기에 있어 뷰가 나타날때, 뷰가 사라질때 사용(Override)하는 함수입니다. (짤막..)

네.. 지금은 뷰의 생명주기를 알려드리는 시간은 아니니 대강 그렇다는것만 이해하시면 그나마 이해하시는데 큰 문제는 없을겁니다.

 

바로 소스를 보시죠

화면을 시작할 때 회전시키기 (가로 회전 혹은 세로 회전)

override func viewWillAppear(_ animated: Bool) {

  // 화면 회전하기 (가로 회전)
  let orientation = UIInterfaceOrientation.landscapeRight.rawValue
  
  // 세로로 회전 (주석제거)
  // let orientation = UIInterfaceOrientation.portrait.rawValue

  UIDevice.current.setValue(orientation, forKey: "orientation")

  UINavigationController.attemptRotationToDeviceOrientation()

}

 

화면이 종료될 때 원상복귀시키기 (세로->가로->세로 혹은 가로->세로->가로)

override func viewWillDisappear(_ animated: Bool) {
  // 기존 세로에서 가로로 변경했었다면 다시 세로로 원상복구
  let orientation = UIInterfaceOrientation.portrait.rawValue

  // 기존 가로에서 세로로 변경했었다면 다시 가로로 원상복구 (주석제거)
  // let orientation = UIInterfaceOrientation.landscapeRight.rawValue
  
  UIDevice.current.setValue(orientation, forKey: "orientation")

  UINavigationController.attemptRotationToDeviceOrientation()

}

 

보시면 크게 어려운 건 없습니다.

세로모드 혹은 가로모드의 값을 orientation 변수에 담아서

UIDevice 클래스에 접근하여 Value, Key 형태로 저장해줍니다.

 

그리고 attemptRotationToDeviceOrientation함수에서 새로운 인터페이스 방향을 수동으로 적용해줍니다.

 

 

UIDevice - Use a UIDevice object to get information about the device such as assigned name, device model, and operating-system name and version.

대충 UIDevice 객체는 디바이스의 정보를 가져오는 용도로 사용할 수 있다는 모양입니다.

=> 그 정보로는 이름, 모델명, os 이름, 버전 등

출처 : developer.apple.com (https://developer.apple.com/documentation/uikit/uidevice)

 

Apple Developer Documentation

 

developer.apple.com

다들 아시다시피 UINavigationController 클래스도 UIViewController를 상속하여 만들어진 클래스입니다.

그러다보니 UINavgiationController만의 함수가 아닌 상속되어진 UIViewController에도 있는것으로 보입니다.

단지 제 생각이지만, 제가 supportedInterfaceOrientations 함수를 사용함에 있어서 계속해서 실패한 까닭은 이러한 상속여부에 따라 UIViewController에서는 Override가 적용이 불가하지 않았나 싶네요. (쉽게말해 무시)

 

UINavigationController.attemptRotationToDeviceOrientation - If your view controller does this, when those conditions change, your app should call this class method. The system immediately attempts to rotate to the new orientation.

대충 ViewController에서 상태의 변경이 필요한 경우 해당 메소드를 부르면 사용자가 원하는 새로운 방향으로 즉각적으로 회전을 시도한다는 모양입니다.

출처 : developer.apple.com (https://developer.apple.com/documentation/uikit/uiviewcontroller/1621400-attemptrotationtodeviceorientati)

 

Apple Developer Documentation

 

developer.apple.com


버전정보 (v1.0)

 - v1.0 2020.07.14 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com


프로젝트 개발 모형 : 폭포수 모델, 애자일 방법(XP방법론)


제가 작업하고 있는 개인 프로젝트(Project.다원 ERP) 개발모형은 거의 폭포수 모델을 베이스로 두고있다고 보셔도 될 것 같습니다.

흠.. 거의 반절 재미삼아 취미(???)로 만드는 프로젝트라서 다른분들이 보시기에는 많이 부족하겠지만, 시간이 괜찮으시다면 한번쯤 쭉 읽어보시는것도 괜찮을겁니다! (아마...?ㅠㅠ)

 

Project.다원ERP_개발 정보(개발언어, 장비, 예정내역)

다원ERP_개발 정보 (개발언어, 장비, 예정내역) Project Infomation Project Name : 다원ERP 기획 : Karzin 분석 : Karzin 설계 : Karzin 개발 : Karzin 디자인 : Karzin 유지보수 : Karzin 개발 정보 Develop Lan..

karzin.tistory.com

사실 고객도 저이고, 개발자도 저인 이상 어느정도 제 머릿속에 정립된 시스템은 바뀔일이 없다보니 거의 빠꾸는 없겠지요.. 다만, 개발하다가 막히는 부분이라던가, 문제가 생겨 바뀔수밖에 없는 부분에 대해서는 로직이 바뀔뿐이지 보이는 UX/UI상에는 크게 바뀌는 부분은 없을겁니다.

 

그렇다면 제가 베이스로 두는 개발모형 폭포수 모델은 무엇일까요?

 

제가 느끼는 특징은 이렇습니다.

 * 확고하게 정립된 프로젝트(계획, 분석, 설계가 고객에게는 확고하게 정리가 된 상태 - 이렇게 만들 것이다!) 

 - 앞에서부터 차례대로 나아가는 모델

 - 노빠꾸 모델

 - 프로젝트의 철저한 문서화 (앞으로 철저하게 하겠습니다..ㅠㅠ)

 

사실 이는 확고하게 정립된 프로젝트 즉, 제 자신이 생각하는 틀에서 벗어나지 않기 때문에 폭포수모델을 사용할 수 있었습니다.

뭐.. 확고하게 정립된 프로젝트라고해서 보통의 프로젝트에서 사용하지 않는건 아닙니다.

기본적으로 일반적인 프로젝트에서도 폭포수 모델은 많이 사용되기는 합니다.

고객과의 커뮤니케이션을 통해 미리 분석을 하고, 분석된 자료들을 토대로 설계를 확정지어버리는 것이죠.

설계까지 확정만 되었다면, 다음으로는 개발을 진행합니다. 개발이 마무리되면 이제 테스트를 하고 배포가 끝나고나면 유지보수가 마지막 단계이겠지요.

 

이걸 머릿속에 기억하시고 아래 이미지를 보시면 이해하기가 편합니다.

아래는 폭포수 모델의 구조입니다.

폭포수 모델은 위에서 아래로 흐르는 듯한 구조를 가지고 있습니다.

 

여기서 한가지! 개발자에게 있어 가장 행복한건 역시 잘 짜여진 설계 문서이겠죠. 확고한 프로젝트의 설계자료는 개발자에게 있어서 굉장한 도움입니다.

그도 그럴게 버튼에 입혀질 디자인이 바뀌더라도 그 디자인의 원본 Structure인 Button은 바뀌지 않으니까요!

 

이 부분을 설명하기 위해서는 당연하게도 설계가 되어 있겠지만, Wireframe이나 화면설계단에서는 이미 이것은 Button이라는게 확고하게 잡혀 있을 것입니다.

그렇기에 개발자 입장에서는 Button을 만들어놓고 그 위에 어떤 디자인을 입히든 문제가 되지 않는 다는거죠.

Button의 위치, 글자 혹은 이미지는 그대로지만, 그 아래 디자인을 입히는건 어쩌면 개발자에겐 어렵지 않은 일이 될겁니다. (물론 상황에 따라 이미지를 바꾸는게 어려운 상황이 있기도 합니다.)

 

하지만 문제는 여기서 일어납니다. 바로 설계문서가 바뀌어버리는 경우가 있습니다.

물론 이 설계문서가 바뀌는건 계획단계-분석단계-설계단계까지는 그나마 문제가 적을 수 있으나,

문제는 개발에 들어가서부터 문제가 하나 둘 터지기 시작됩니다.

예를 들어 개발자는 디자인(버튼의 스킨)을 바꾸는건 쉬울지는 몰라도, 설계문서의 UX나 화면설계서가 크게 바뀌는 경우 그 구조 차체를 새로 만들어야하는 문제가 생길 수 있습니다.

이는 결코 작은 문제가 아닙니다. 개발자는 변경된 설계로 인해 지금까지 쌓아 올린 모든걸 새로 쌓아올려야하는 위험한 도박이 될 수 있습니다.

 

이런 경우에는 폭포수모델과 조금 방식이 다른 애자일 방법론을 사용해야하는 경우가 있습니다.

애자일 방식의 하나인 XP(익스트림 프로그래밍)방법론처럼 개발자 개개인의 역량에 맡긴채로 고객과 계속 소통을 해가면서 진행을 해가는 방법입니다.

수시로 변경이 되어가는 고객의 요구사항을 맞춰가며 팀원과의 대화를 통해 문서보다는 어느정도 개발이 진행된 시스템을 먼저 보여주는 형식입니다. 여기서 개발이 진행된 시스템은 프로토타입이라고 봐도 문제가 없을정도의 퀄리티가 있는(높은) 시스템입니다.

쉽게 말하면 프로토타입을 마구 찍어내면서 고객에게 모두 보여고 또 고객이 원하는 요구사항에 맞추어 프로토타입을 변경해가며 완료되어가는 시스템을 보여주는 것이죠.

아래는 애자일 방식의 구조입니다.

애자일은 계속된 반복을 통해 결과물을 만들어갑니다.

그만큼 고객과 개발자간 서로의 커뮤니케이션이 가장 중요한 개발론이기도 합니다.

애자일 방식의 특징으로는

 - 중요한 커뮤니케이션

 - 요구사항의 변동에 유연하고 그만큼 빠른 대처가 가능

 

여기서 잠시 한가지! 애자일에 대한 예시를 생각해보다보니 좋은 예시가 떠올랐습니다.

그 좋은 예시로 설명을 든다면! 개인적으로는 가장 적합한 프로젝트로는 R&D가 적합하지 않나 싶습니다.

사실 R&D는 요구사항이 계속해서 바뀌는 프로젝트 중 하나입니다. 

진행을 하다보니 시스템의 구조가 틀어져버린다거나, 아무래도 새로운 요구가 들어가야한다던가 여러가지 이유로 계속해서 변동에 유연해져야하는 경우가 많이 발생하죠. 특히 연구가 진행이 되고 있는 상태라면 그 연구에 맞춰지기 위해 요구도 계속해서 변동하는게 R&D라고 생각하고 있습니다.

그렇기에 애자일방법론(XP방법론)을 사용해서 고객과의 끊임없는 커뮤니케이션을 통해 Prototype을 만들어내고 테스트함을 반복함으로써 고객에게 만족도가 높은 시스템에 가까워지는 방법이라고 생각합니다.

 

폭포수 모델 이야기를 꺼내다가 잠시동안 애자일 방법론을 이야기해봤지만, 저는 보통 두가지를 다 경험해가면서 진행을 하고 있습니다.

어떤때는 개발보다 분석과 설계를 통한 문서화를, 어떤때는 문서보다는 개발이 앞서서 진행이 되어 PM과 PL과 소통해가며 프로토타입을 최단시간으로 또 최상의 퀄리티를 내기위해 노력하기도 하죠.

 

다만 이런 방식을 택하기 위해서는 위에서 말한것처럼 계획을 철저히 지켜나가는 '노빠꾸' 폭포수 모델이 굉장히 좋아보일 수 있으나.. 제 생각으로는 어느정도 규모가 있는 프로젝트에서는 폭포수 모델이, 규모가 적고 투입되는 인원이 적어지는 프로젝트에서는 애자일 모델이 가장 적합하다고 생각합니다. (위에서 말했던 R&D와 같은 타입)

이유는 규모가 있는 프로젝트(투입인력이 많고 프로젝트가 큰 경우)의 경우 어느정도 규모가 있는 만큼 고객의 요구사항이 어느정도 정립이 되어 있다고 보여집니다. 그런 경우 철저한 계획을 수립하고 수립된 계획대로 요구에 맞춘 분석, 설계를 진행하여 알맞은 결과를 내어주는게 필요하다고 생각을 하고 있습니다.

반면 규모가 적은 프로젝트(투입인력이 적고 프로젝트가 상대적으로 작다 싶을때)의 경우 고객과 팀원간의 커뮤니케이션을 통해 정립이 덜 된 프로젝트를 눈치껏(?) 빠르게 만들어주는게 중요하다고 보여지기 때문입니다.

그만큼 애자일의 경우 (여기서는 XP방법론을 예시로 들어보겠지만), 고객 - (PM, PL) - 팀원들간의 커뮤니케이션이 제일 중요하게 부각이 되는게 그 이유중 하나입니다.

 

실제로 프로젝트 진행시에도 상황에 따라서(규모 혹은 요구사항 등) 폭포수나 XP방법론을 사용하고 있습니다.

 

위에서 적은 내용은 저의 생각일 뿐이고 어느 하나가 더 좋다고도 할 수 없는 방법론들이지만, 현재 자신의 팀원이 처한 상황에서 가장 효율좋은 방법을 찾아내는게 중요하지 않을까 싶습니다.

 

PM, PL분들 모두 고생많으시고 멋지십니다! 화이팅입니다! (갑자기???)

물론 개발자들도 말이죠!ㅎㅎㅎ


 

흠흠.. 그냥 제가 만드는 프로젝트는 폭포수 모델을 베이스로 두고 있고, 폭포수 모델은 이런겁니다! 라는걸 적으려했는데.. 또 길어졌네요. 항상 이럽니다ㅠㅠㅠ 뭔 말이 이렇게 많냐 싶으시겠네요.. ㅎㅎ... 그래서 그냥 적당히 끊었습니다. ( 사실 더 주저리주저리 적어 나갈순 있는데.. 다들 졸리실겁니다.. 그 마음 다 압니다ㅠㅠ 밥먹을시간만 되면 꼭 잠 다 깨다가도 교장선생님의 말씀이 이어지면 졸리는 그... 뭔가모를 그런 분위기.. 저도 다 경험해봤거든요 ㅋㅋㅋㅋㅋㅋㅋ)

 

오늘은 그냥 제가 사용중인 프로젝트의 개발 모형에 대해서 잠깐이나마(???) 설명하는 시간을 가졌습니다. 

물론 제가 틀린부분도 있을 겁니다. (아직 많이많이 부족해서..ㅠㅠ) 이런부분들은 지적해주시면 바로바로 공부해서 수정하도록 하겠습니다!

이제 슬슬 샤워하고 Class Diagram이나 작성해봐야겠네요 ㅋㅋㅋ

는 샤워하면서 아 일단 쓴거 그냥 다 쓸껄 아쉬워하면서 생각만하다가 나오자마자 에자일방식 구조랑 내용을 좀 추가해뒀습니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이빨닦으면서도 이런거 생각하고 있는 나는....(절래절래)ㅋㅋㅋㅋㅋㅋㅋㅋ

 

+ 음.. 생각해보니 내일 오전부터 중요한 회의가 있었네요. 오늘은 Class Diagram보다는 내일 오전에 있을 회의에 졸지 않기 위해 일찍 공부하고 마무리해서 조금 일찍 취침을 해야겠군요! (변명이지만 이래서 프로젝트 WBS(일정관리)를 작성하지 않았습니다 ㅠㅠ 워낙 스케쥴에 변동이 많다보니...)

 

 

 

버전정보 (v1.2)

 - v1.0 2020.07.13 배포

 - v1.1 2020.07.13 애자일 방식 구조 및 내용 추가, 오타 수정

 - v1.2 2020.07.13 내용 수정

 

* 본 게시글의 이미지에 들어간 글씨체는 네이버 나눔 글씨체인 나눔스퀘어 Bold를 사용했습니다.

* 본 게시글의 이미지는 전부 (이미지 내의 픽토그램 등) 직접 제작했음을 명시합니다.

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Project.다원은 개인(karzin)이 기획, 분석, 설계, 디자인, 개발, 유지보수 등

모든 부분을 혼자 맡아 진행하는 개인 프로젝트입니다.

Project.다원 Ensemble

Karzin

abbeea@naver.com

 

 

 

 

+ Recent posts