'개발'에 해당되는 글 5건

  1. 기존 프로젝트를 프레임워크 도입하고자 하는경우에 대한 잡설
  2. 맥os 마이그레이션
  3. NodeJS 에뮬레이터 glitch
  4. mysql date_format() 관련
  5. [linux] 특정 문구,특정 파일내 특정문구가 들어가는 명령어찾기

php 프로젝트를 접하는경우 많은 회사들이 자체 프레임워크는 커녕

 

컴포저를 올리지도않고 사용하는 케이스가 많습니다

 

대표적인사례라고하면 워드프레스와 그누보드를 기반으로 커스터마이징하는 케이스가 많습니다

 

프레임워크를 배우고자한다 혹은 프로젝트를 프레임워크로 전환하고자 희망하는경우에 대한 

 

잡설에 가까운 가이드라이닝을 적고자 합니다

 

1.시간과 계획

보통 포스팅을 검색 혹은 관심을 가지고 들어왔을경우 당신은 매우 높은확률로 혼자서 진행하게 될겁니다.

 

팀장은 커녕 같은 개발자 팀동료들조차 기본적으로 동작하는데 뭔 걱정인가 다음에 하면되지 라는 생각을 합니다

 

실은 그런 마인드로 접근하면 할말은 없습니다. 혼자 작업하는경우에는 자기만족 혹은 장점을 자신이 찾아보거나

 

아니면 계획단계에서 각을재는 계획등이 매우중요합니다. 어디서부터 어디까지를 프레임워크로 전환할것인가

 

내가 목표한 기간내에 마무리가 가능한가등은 매우 중요한 요소입니다.

 

목표의경우...제가 경험했던 케이스(라라벨)를 기반으로 설명드리겠습니다.  

 

2. 목표

2-1. 리뉴얼 (난이도 : 하드코어,성공확률 : 0%,기간 : n년이상)

혼자서는 절대불가능한 영역이라 생각합니다.제 실력이 부족한거라 생각하기에는 생각해야 할것들이 많았습니다.

 

쌓여있는 레거시데이터베이스가 많으면 많을수록 문제가됩니다. FK를 잡아서 ORM을 통한 작업등을 하고자 하는건

 

생각할수도없습니다. 여러분들의 레거시데이터베이스는 데이터가 많으면 많을수록 무결성이 지켜지지 않을거니까요

 

무결성이 지켜지지않는걸 확인했다면 신규프로젝트에 맞추어 마이그레이션을 해줘야합니다. 와..신난다!

 

만에하나 만들어져서 리뉴얼을 하게되는경우 데이터유실또한 생각해서 개별적 마이그레이션의 형태로 만들어줬다면

 

괜찮겠으나 만들때 당시의 나를 증오하며 욕만 하는 당신을 볼수 있을겁니다.

 

 

2-2. 백엔드로직 리팩토링(난이도 : 어려움,성공확률 30~100%,기간 : ~6개월)

여기서부터는 혼자서도 어느정도 진행이 가능해집니다.

 

레거시코드를 전부 옮긴다는 마인드가 아닌 단계를 거쳐 하나씩 하나씩 옮긴다는 마인드를 가지는게 좋습니다.

 

가급적이면 컨트롤러메소드 기반을 생각하고 작업해주시면 좋습니다. 

 

컨트롤러메소드를 추가적으로 리턴하거나 view로 페이지를 호출하거나

 

json을통하여 리턴을 하더라도  어떻게든 써먹을수있습니다.(그만큼 컨트롤러 메소드가 중요합니다 ㅠㅠ)

 

또한 엘로퀀트모델을 사용한다면 좋을수있으나 이미 2-1의 케이스에서 확인했듯이 무결성처리는

 

물론이거니와 FK도 안잡혀있어 모델을 쓴다고 하더라도 모델만 불러놓고 쿼리빌더만 사용하게 됩니다.

 

목표단계도 잡기가 쉬워집니다. 예시로 보자고하면 아래와 같이 진행합니다

 

레거시에 있는 select쿼리를 컨트롤러메소드로 분리->백엔드로직(Create,Update,Delete) 분리->뷰페이지 이식 작업 

 

여기까지 진행이 되었다면 회사에서 진행할지 안할지 이야기가 나올수 있습니다.

 

이제 남은건 백엔드로직에 들어가야할 밸리데이션체크 및 데이터 리턴이 실패했을경우의 따른 익셉션로직 추가등이 남습니다.

 

 

2. 사후처리

목표를 달성해 이제 라이브에 반영을 하게되었습니다 축하드립니다!

 

이제 남은건 다음 리뉴얼을 위한 마이그레이션을 준비해야합니다.

 

데이터 마이그레이션 준비등을 거쳐갑니다. 프론트엔드의 프레임워크 또한 고려사항이 될수있겠군요!

 

해야할것은 많습니다 하지만 해야할 리소스는 매우적습니다(...)

 

당신은 리팩토링을 성공적으로 끝냈습니다. 하지만 연봉은 오르지않고 일만 늘어났습니ㄷ

 

2. 결론 및 사족

제 케이스는 데이터를 가끔씩 조회해서 엑셀로 요청이 오는케이스가 많은편이기에 쿼리를 짜두기보다는

 

컨트롤러를 통해서 만들어두고 로컬에서 데이터베이스커넥션만 교체하여 내려받는형태로 자주 사용합니다.

 

현재 직장내에서 저같은 케이스와 유사하다고하면 세팅해서 접근하기도 좋습니다.

 

프레임워크를 배우려고하는데 마땅히 할게없다고 하시는 분들에게는 강력하게 추천드립니다.

 

가급적이면 절대로 혼자 하지마세요 대가리만 빠개집니다

 

맥os내에 새로운기능이 생겼습니다.

 

이름하야 마이그레이션... 내용은 아래링크를 참조해주ㅣ면 됩니다.

 

 

https://support.apple.com/ko-kr/HT204350

 

새로운 Mac으로 콘텐츠 마이그레이션하기

마이그레이션 지원을 사용하여 다른 컴퓨터의 모든 문서, 앱, 사용자 계정 및 설정을 새 Mac으로 복사할 수 있습니다.

support.apple.com

 

내용만 줄이자면 와..이제 내 노트북의 있는 데이터를 새로 이관해서 세팅하는 수고가 줄어들겠구나!!

 

해서 어쩌다보니 기존에 사용하던 장비보다 스펙이 좀더 좋은 장비가 생겨 이번에 도전해보았습니다.

 

굉장히 흡족하게 올라옵니다. 매우매우 좋습니다! 하지만 안올라오기에 새로 설정을 잡아주어야하는 케이스가 있어

 

만일 마이그레이셔닝을 하게되는경우에 한해서 참고해주세요

 

적용처 가능유무 비고
어플리케이션(phpstorm,workbench등) 가능 프로필파일 정상작동
brew 관련 유틸리티 가능 정상설치 확인됨
다만 특정버전으로 고정하여 작업하는경우
추가적으로 재설치 및 설정이 필요합니다.
홈스테드기반의 vm 이미지  불가능 공유폴더 및 네트워크설정등을 잡아 커스터마이징하면 할수록 안될가능성이 높아보입니다
OS버전 불가능 초기화이후 OS를 기준으로 마이그레이셔닝됨
~/.ssh 불가능 별도 백업을 해주세요

 

작성일 기준으로 저와는 달리 인텔기반 mac->m1 mac으로 이전하게 되는케이스가 많을거라 생각하기에 전가상화의 vm이미지를 

 

사용할수없기때문에 크게 문제가 되지않아 보입니다만....

 

저와같이 가상화이미지를 기반으로 작업하는 경우에는 VM을 새로 생성해주시고 설정파일을 전부 찾아하나 바꿔주는 작업을 해주시거나

 

버추얼박스를 쉽게 마이그레이셔닝 하는 방법을 찾아보셔야합니다만.. 저는 검색하는데에 찾지못한지라...

 

깔끔하게 포기하고 직접 다시 세팅을 잡아 두었습니다-_-;;

 

OS버전 및 VM이미지에서는 답이없습니다.

 

또한 가장중요한건...같은네트워크대역에서 있어야지 마이그레이션이 가능하며 와이파이로 잡아 처리하게되는경우

 

원본이 되는 장비의 용량을 80기가까지 최대한 줄여서 마이그레이셔닝을 했으나 2시간이상이 소요됩니다=_=;;;

 

이점을 확인하시고 마이그레이셔닝할때 참조해주시면 됩니다.

국내자료로든 외부자료로든 블로그 포스팅으로 많이 없는지라



챗봇 API,단순하게 자신의 서버는 없는데 테스트개발환경이 필요한 경우가 있습니다




몇몇 API의 경우에는 도메인이 있어야하는 경우도 있으며 더 나아가서는 SSL 세팅이 되어있어야 하는 경우도 있습니다.


실제로 서버가 바로 올라가기전에 테스트를 하기위한 환경을 만들기가 힘들죠



예를들어 페이스북 챗봇 API 연동을 할 경우에는 키값외에도 적용되어있는 URL이 ssl이 적용이 되어 있어야 하는



경우가있어서 그런지 페이스북에서 테스트환경을 위한 환경을 제공해주는 방법을 제시하고 있습니다



https://glitch.com 가 그 경우인데요. 가입을하고 나면 인스턴스하게 https://프로젝트명.glitch.com


으로 nodejs 가 구동되는 프로젝트 공간을 제공해줍니다. package.json에서 사용하는 라이브러리(express,require 등등 많겠죠?)


를 작성해주면 자체적으로 필요라이브러리가 세팅되어 돌아가는 환경입니다



1차적으로 회원가입을 하게되고 기억나지 않지만 여러가지 프로젝트를 추가해서 작업할수 있습니다.


github에 있는 리포지토리를 가져와서 체크아웃을 받을수도 있습니다




해당 package.json에 start 부분에 server.js를 실행할수있게 맞춰 작업한 이후



위 그림과 같이 코딩작업을 맞추어 작업해주시면 됩니다. 위 소스는 카카오톡 챗봇 api의 기본적인 api 골격입니다.


기타 기능이 몇 있으나 이클립스,인텔리j,atom과 같은 IDE 프로그램에 익숙하시면 사용하다보면 어떤식으로 사용이되는지 알게 됩니다.


1차적으로 수정을 하게되면 자동으로 nodejs가 재시작이 되기도하며


glitch페이지에서 나가지 않는 이상 해당도메인은 죽지않고 구동이 된다고 보시면됩니다.


나가게된다고 하더라도 구동이 되긴 합니다만..일정시간이 지나면 동작하질 않습니다.


실제 서버로 작업하고자 하는경우 도메인에서 서브도메인을 추가해줘야하고 was에서 체크하고 ssl도 세팅해줘야하고


이래저래 복잡한 과정을  거쳐야 하는 케이스를 쉽게 처리할수 있습니다.



보통 통계를 내게 되는경우 날짜별로 통계를 내게되는 케이스가 상당히 많습니다.


연월일별의 쿼리는 비교적 쉽게 나오는 편이지만 상반기,하반기,주단위등의 경우에는 날짜별로 범위를 잡은상태에서 뽑기가 애매합니다


오라클같은경우 시간을 to_char와 case문등을 통해서 이런저런 함수를 맞춰 인라인으로 묶어처리하면 어떻게든 나오게 됩니다.


mysql은 date_format이라는 기능을 통해서 현재 연도의 주단위를 뽑아낼수도 있습니다.


하지만 주단위나 상하반기등 뽑는건 생각보다 많이 골치가 아픕니다.


예를들자면 게시판글을 1일부터 4일까지 주단위로 그룹화하여 보여주고싶다고 한다거나


7로 나눠지지 않는 상태의 범위로 돈다거나 하면 의미가 없겠죠[...]


주단위라고 하더라도 월요일부터 시작인지, 화요일부터 시작인지 주말 및 공휴일을 뺀다던지의 관한 케이스도 있을겁니다.


이건 협의를 통해서 UX를 바꾸는게 나을수도있으니 기획팀 실무진간 협의가 굉장히 필요합니다.


왜냐고요?통계를 생각해서 테이블구조를 작업하기보다는 로직을 통해 테이블구조를 만들기때문이지요


해당 컬럼을 형태에 맞춰 gorup by 하거나 인라인으로 묶어 처리하면 됩니다. 


http://www.w3schools.com/sql/func_date_format.asp



select 

created_at,

date_format(created_at,"%Y") 'Year',//연

date_format(created_at,"%Y-%m") 'Month',//월

date_format(created_at,"%Y %v") 'Week1',//주단위1

date_format(created_at,"%Y %V") 'Week2',//주단위2

date_format(created_at,"%Y %u") 'Week3',//주단위3

date_format(created_at,"%Y %U") 'Week4',//주단위4

date_format(created_at,"%Y-%m-%d") 'Day'//

from tables

기본적으로 리눅스 기반 권한이 웹호스팅의 경우 권한이 있을지 없을지는 모르겠지만


루트계정내에서 찾는 경우가 꽤 많아 포스팅해둡니다.



find -name *.txt | xargs grep '찾을 문자열'


find 명령어를 이용해서 특정 필터를 걸거나 수정/삭제된 날짜를 뽑을수 있습니다.


파이프라인(|) 이후 xargs grep '' 의 경우는 find 로 찾은 파일내에서 특정문구를 찾아 출력을 합니다.


퍼미션에 걸려있는 파일이나 디렉토리의 경우에는 색인되지 않습니다만


제기준에서는 응용해서 사용할 일이 많은편이긴하네요