405 Get was not supported 


Swagger2  json으로 문서화 하는건 되는데 


Swagger-ui.html 으로 접속하려하면 405 Get not supported   가 뜬다


 


처음에는 스프링 시큐리티 문제인지 알았다. 


결론 : 정확한 원인은 알수가 없지만  


스프링 부트 버젼을 1.5.6 으로 올리고 (이건 별 상관 없는듯 싶다)


내가  해결한 방법은


thymeleaf 을 활성화 해준 것 이다 . @Controller 하나 따로 파서 


HelloWorld.html 을 하나 만들어서 thymeleaf 를 활성화 시켜주니 


Swagger-ui 가  제대로 돌아갔다.


그 중간과정에 


버젼 변경이라던지 이것저것 매우 삽질을 했지만 문제는 이것인 것 같다.

(참고로 최종적으로 적용한 버젼은 2..7.0이다 )








서버를 공부겸 


졸작에 사용할 기반이될 서버를 구축하려한다.



AWS  프리티어 :  

학부생 입장에서 서버 올려둘 곳으로 AWS 보다 좋은곳이 있을까  


----------------------Database -------------------------------------------

RDB  MeriaDB  : 


      서비스에 필요한 정형적인 데이터들 회원정보 , 비지니스 도메인 전반 을 관리 



Nosql (doc타입) MongoDB : 


개발하고자하는 서비스에 채팅이 들어간다 . 채팅로그를 서버에 저장하는데 mongoDB를 사용하려한다.


기타 접속 기록, 서비스 사용 시간 기록 과 같은 로그 데이터도 NoSQL로 관리하려한다.


토큰저장 DB (key Value 타입)  Redis:


memoryDB로 사용할것이다 서버를 Rest하게 구성할것이고 

인증서버에서 access_token을 저장해놓은 db가 필요하다 

Redis는 AWS 에서 서비스 제공을 안해주기때문에 WAS 올려둘 인스턴스에 같이 올려두려고 한다.


실 서비스를 하려한다면 이것저것 물리적으로 분리되어야 하겠지만(auth서버 ) 


-----------------------------------------------------------------------------------




-------------------------------Web Application Server----------------


   Spring Framework   4.3.xx    :  이번에 ver 5가 나왔는데 졸업작품이 내년까지 진행되니 버젼을 5.xx 로 올려보고 한번 사용해볼수 있지 않을까 라는 기대와 의지가 있다.


java 1.8  : 람다식과 스트림문법를 공부하고 실제 짜보는 것을 목적으로 버젼 을 선택함   



JPA+Hibernate  :  ORM으로 역시 자바 표준이 무난하다 이에 대해 이의가 없다.


Mybatis (Sql Mapper 프레임 워크) :  jpa와 mybatis를 동시에 쓰고자함은 두마리 토끼


를 이번에 좀더 숙련도를 올려보고자함이다.

mybatis를 무시하는 경향이 있었는데 심익찬 개발자님을 만나고 생각이 많이 바뀌었다.



Netty :  2017 스프링 캠프에서 본 새로운 기술들의 핵심 키워드는 NIO였다

네트워크 프레임워크인 네티도 한번 만져보고싶고 ....

이건좀 내 무리한 욕심이 아닐까 싶다..



기타 :


lombok  :  실무 하시는 분들은 롬북에 굉장히 회의적인 입장을 보이셨다. 

일단 JPA 에서도 무한 루프 같은 자잘한 문제 땜시 별로 안좋아 하는것같지만


편.하니까 일단 쓴다



Swagger2 :  그냥 설정만 잡으니까 이렇게 편하게  api를 문서화 해준다니 완전 개꿀~



Node.js : 졸작은 어플로 클라이언트를 구축할것이지만 웹으로도 어느정도 필요할수             있다. 

굳이 Rest하게 잘갗춰놓은 두고 새로 서버를 만들이유는 없겠지만 

공부겸 한번 사용해볼 기회가 있었으면 좋겠다




 




mybatis를  어설프게 쓰고 있다는걸 깨달았다.


mybatis는 허접한 프레임워크가 아니다

그 아키텍쳐를 공부하고 싶지만 


그런 내용을 찾기 힘들다.


거대한 아키텍쳐를  일개 학부생인 

나 혼자서 분석하고

공부하는 것은 불가능하다  

가능할지도?





되게 친근하셨다. 




옆집에 최범균 개발자님이 사신다고 한다 ㄷㄷ 

madvirus님 책에 싸인좀해주세요 ...


재미있는 사실


mybatis 의 batis는 영리한 조그만 새 종의 이름이라고 한다.

그래서 mybatis 로그가 새(bird)다  




 

 

 

스프링 캠프 

돈주고 들어도 안아까울 강연을 들었다.

 

 

올해 스프링 캠프 2017 

 

트랜드 키워드는

 

리엑티브 자바

스프링 5 

자바 9

 

이였다.

 

최근 나오는 기술들은 

대부분이

멀티 쓰레딩을 효율적으로 관리, 사용할수 있는가?

에 대한 문제 해결을 다루고 있다.

 

 

그래서 이번 강연을 듣고 삘받아서 

node.js ,

 netty, 

java8 in Action 

 

이렇게 책 3권을 질렀다.....

 

 

 

 

 

 

 

 

 

 

 

 

-이일민 개발자님이 내책에 싸인을 해주셨다.-

 

군대에서 내 후임이 토비 스프링 책에 물을 쏟아서 책이 울어있다. ㅠ

 

 

 

'Forum Reviews' 카테고리의 다른 글

2018 네이버 해커톤 참여 후기  (0) 2018.05.25
DDD START 최범균 개발자님  (0) 2017.10.22
mybatis 암복호화 플러그인 강연 후기  (0) 2017.06.14


애초에 하드웨어쪽은 관심이 없으니


각 부스들의 하드웨어적인 아이템을 제외하고 



소프트웨어 쪽 IT 기술들만  

놓고 본다면 

올해 IT 쇼 주요 키워드는 


보안&서버 모니터링 솔루션, 

분산 클라우드,

VR


이 정도로 추릴수 있을것 같다.


드론이라던지, 서버장비 같은 기술도 여럿 있었다


몰론 나는 클라우드 서비스나 

서버 모니터링 서비스들이 매우 매력적이였고 흥미로웠으나


마케팅 이라는 입장에서 바라보았을때 


정말 흥미로웠던 기술을 


실시간 고객 분석 소프트웨어이다.





학생의 신분으로 가서 

부스가서 궁금한게 있어도 물어보지도 못했다 ;;;



옆에서 과장님 차장님같은 분들이 와서 질문하니 


일개 학생에게 여유주기는 힘들었겠지 ㅠㅠ


귀동냥하듯이 옆에서 줍어 들으면서 구경했다. 






근데 바디프랜즈는 왜거기 있는거야????







실시간 고객 분석 소프트웨어 




이건 정말 멋진 기술이였다. 


졸업작품 아이템으로 사용하고 싶었다.


cctv로 점포를 촬영하여 점포에 들어와있는 고객들을 영상으로 인식하여 


고객이 얼마나 점포에 머물렀는지?

고객이 어느 가판대에서 어느 물건을 유심히 관찰했는지?


점포내에 있는 고객들을 실시간으로 분석해준다.


그러한 실시간 정보들을 모아 

원하는 단위로 통계까지 내주는 소프트웨어다.




이러한 기술을 보유한다면 정말 1초단위로 마케팅 전략을 새롭게 세울수 있다.


카메라가판대를 5분가까이 어슬렁 거리는 고객을 cctv가 영상분석을 통해 

실시간으로 

고객의 니즈를 파악할 수 있다. 



이러한 데이터들이 축적되어 마케팅 부서에 전달된다면


그 빅데이터는 새로운 사업 의사결정에 큰 도움이 될 것이다.
























위 업체 기술은 

 관리적 측면 보안 솔루션이다.


서버 자체의 기술적인 보안이 아무리 좋다 한들


허술한 보안 의식으로 


이메일에 포함된  첨부파일 


신음하는 서민경........제 .avi


과 같은 파일을 


아무런 의심없이 컴퓨터에 다운받는순간 


보안은 무너지고 만다.


그렇게에 기업들은 보안교육을 실시한다.


G-POST라는 업체는 기업 보안교육이라는 시장에 


니즈를 캐취했다.



 


이 관리적 보안 솔루션은 


모의 크래킹 공격을 할수있다. 


블랙햇(Black Hacker) 들이 사용하는 일반 사용자들의 방심을 유도하는 

방식의 공격기법들을 


일발 사용자들이 체험해볼수 있다.


.avi

.hwp 파일들이 편집모드로 풀리는 순간 


확장자가 해킹을 위한 .exe 같은 실행파일로 변환된다.


이러한 내용들을 교육하고 체험할수 있다는 것은 


효과적이다.










- 열심히 가져다 본 팜플렛들 -

















유동인구를 실시간으로 파악할수 있는 기술 


유동인구들의 특징 ,규모 를 통계내주는걸로 보인다.















유일하게 학생인 나한테 다가와서 친절하게 설명해주신 부스다.


현재 정부 공공기관 문서 일부에 적용되어있는 기술이다.


주민 등록표 같은 중요 문서들이 위조 되었는지를 단순 qr코드를 찍는 행위를 통해 검증할수 있다.


그리고 qr코드를 찍음으로서 해당 문서에 대한 내용을 음성으로 설명해주는 등


소외계층을 지원하는 매우 좋은 취지의 기술이다. 



문서 위조 방지를 위한 기술이고 이 기술을 이용하기 위해서 


클라이언트 측 회사는 따로 서버를 구성할 필요 없다는 장점이 있다.


문서 검증에 대한 내용은 보이스 아이 라는 


이 회사가 소유한 서버에서 처리가 이루어진다. 


















 

 

우연히  S/W 프레임워크 수업을 수강하고 있다.

 

프레임워크라는 단어에 반가워서 수강신청했는데

 

수업내용이 전자정부 프레임워크였다.  ;;;

 

학점관리상 굉장한 이득을 볼 수 있었지만 수업내용은 군대에서 공부한 토비 스프링 

 

내용보다 원리 중심적이지는 않고 실무 지향적인? 내용으로 수업이 흘러갔다. 

 

솔직히 스프링 프레임워크를 JDBC도 잘 모르는 학부생들을 상대로 

 

가르치려고 노력 하시는 강사님이 대단하게 느껴진다. 

학생들이 안타까워... 저걸 어케 이해함...

 

 

수업 초기에 작년에 강의평가에서 혹평을 받았다고 하셨는데  

 

경영학과 학부생 상대로  스프링 프레임워크 강좌가 열린다는 것 자체가 

 

이상한일....

 

컴공애들 상대로 강의를 해도 스프링의 철학같은것을 이해하기 힘들텐데 

 

프로그래밍에 관심도가 덜한 경영 학부생들이면 말 다했다.. 

 

 

서문이 길었다. 

 

수업 듣다보니 단골 질문이 나왔다.

 

 

Class 와 Interface의 차이를 서술하시오 

 

 

간단한 내용이지만 정리를 해볼까 한다. 

 

 

 

 

 

 

 

1. Interface는 선언부 Class는 구현부이다. 

 

자바는 철저한 OOP 를 기반으로 하고있다. 

 

객체지향 프로그래밍의 핵심은 추상화(Abstraction) 이다. 

 

추상화를 함으로서 중복된 소스코드를 없앨수도 있고 

 

느슨한 결합도 (loose Coupling)를 유지 할수도 있다. 

 

추상화하는방식(상속과 인터페이스의 차이도 나중에 작성해야 겠다. )

 

 

 

인터페이스는 객체지향적인 소스코드를 생산할수 있도록 도와준다.

 .

 

  Don't re-invent the wheel(바퀴를 다시 만들지 말라)

 

 

객체지향 프로그래밍의 궁극적 목표인 위 모토를 만족하기 위해서 객체지향 5대 원칙(SOLID)을 세우고

캡슐화 추상화와 같은 이론들을 정립했다

Interface는 이러한 정립된 이론들을 구현하는 최전선에 서있는 개체이다.

Interface는 프로그래밍에 입문 하는 사람들에게는 그 편리함을 체감하기 힘든  기능이다.

 

Interface는 식당의 메뉴판 같은 역할을 한다

메뉴판을 보는 손님들이 원하는 정보는 어떤 음식을 먹을까?”이지 그 이상의 복잡한 정보를 원하지 않는다.

스테이크요리를 만들기 위해서는 불에 얼마나 굽고 어떤 소스를 만들고 숙성을 얼마나 하는지 같은 복잡한 내용이 적힌 두꺼운 요리책이 필요하다.

그러나 그러한 두꺼운 요리책을 손님 메뉴판으로 제공하지 않는다.

 

Class 가  두껍고 복잡한 내용이 담긴 요리책이라면 Interface 1~2장으로 이루어진 가벼운 메뉴판이다.

 

우리는 손님에게(사용자) 가벼운 메뉴판을 제공하지 두껍고 무거운 요리책을 주지 않는다. 

손님은 소고기 스테이크가 불위에서 어떤방식으로 구워지는지 몇분 구워지는지 같은 세세한 정보를 알고 싶지 않다.

그저 맛있는 스테이크를 먹고싶어서 간단히 적힌 메뉴판을 보고

"소고기 스테이크 1인분 주세요~" 라고 주문할 뿐이다.

 

소프트웨어에서도 마찬가지다.

어떠한 라이브러리,API를 사용하는 사용자는 그 API가 얼마나 멋진 추상화가 적용되었고 다양한 기법들이 사용됬는지 알고싶지 않다.

그저 그 API또는 라이브러리를 통해 내가 구현하고자하는 기능에 편하게 쓰고싶을 뿐이다.

 

그렇기 때문에 우리는 메뉴판을 제공하듯이 인터페이스를 제공한다.

 

스테이크의 조리법이 수정되었다고 

메뉴판에서 무엇인가 수정되지 않듯이

 

구현체가 바뀌었다고

인터페이스가 수정되지 않는다.

 

 

 

 

 

 

 

JDK로 알아보는 Interface 사용 예제

 

 

List<String> list=new ArrayList<String>();

 

list.add("HI");

 list.add("assignment");

 list.add("yea~!");

 

다음 예제를 보자 예제는 ArrayList 3개의 문자열을 넣는 소스코드이다

여기서 봐야할 점은 객체 list 선언을 ArrayList<String> 하지 않고

List<String> 으로 선언했는가? 이다.

 

 

ArrayList<String> list=new ArrayList<String>();

list.add("HI");

 

 list.add("assignment");

 list.add("yea~!");

 

이렇게 ArrayList 선언 해도 돌아가는데 아무런 문제가 없지만

 

 

좋은 프로그래머라면 전자방식을 선호하며 

반드시 그래야만 한다.

 

 

 

자바언어를 창시한 제임스 고슬링은 리스트라는 자료구조를 설계할 리스트의 구현 방식이

 

리스트를 선언하는데 영향을 주고 싶지 않았을 것이다.(진짜설계는 다른 사람이 했겠지만 편의상..)

 

 

그래서 List<> interface 선언했다.

 

List<> Interface 선언 함으로서 우리는 소스코드 변경이 가능하다

 

 

 

 

 

 

 

 

 

 

 

 

이것은 Strategy Pattern (전략패턴) 이라 부르는 디자인 패턴이다. 

 

하나의 기능을 구현하는 여러가지 전략(알고리즘)이 있으면 이것을 

 

인터페이스로 선언부를 작성하고 여러가지 구현부를 클래스로 작성하여 

 

교체하기 편리하게 하는 것이다.

 

 

인터페이스를 사용함으로서 이러한 설계상 이점을 가질수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

사실 인터페이스는 아무런 의미가 없는 껍떼기에 불과하다 느낄 때가 있다.

 

실제로도 구현상 인터페이스는 그저 매개체 정도의 역할만 하고 실질적인 내용에는 아무런 기여를 하지 않는다.

 

인터페이스는 설계상 이득을 얻기위해 선언하는것이다.

인터페이스는  기능들을 묶는 논리적인 하나의 단위를 띄고 있다.

 

 

인터페이스는 비용(Cost)이다. 그러나 모든 코드 또한 비용이다.

비용을 들인 만큼 얻는 가치가 있다면 투자하면 되고 없다면 투자해서는안될것이다

프로그래밍에서 간접화와 추상화에 관련된 코드를 비용으로 따진다면   간접비에 해당한다.

추상화를 하면 할수록 SW 오히려 복잡도가 올라갈수 있고

소프트웨어 공학에서도 과도한 추상화와 디자인패턴 남발은 피하도록  노력해야 한다고 주의하고있다.

 

그러나 복잡도가 올라갈수 있는 위험이 있다고 인터페이스를 사용하지  않는다면

구더기 무서워서 못담군다는 말이 가장 어울리는 표현일 것이다. 

 

그렇다고 모든 클래스에는 인터페이스를 만든다라는 과격하고 경직된 방식의 프로그래밍은

 

인터페이스가 좋다 하더라도 너무 극단적인 방식 이다.

 

인터페이스의 사용여부는 결국 개발자 또는 아키텍트 당사자의 판단에 맡길 수 밖에 없다.

 

인터페이스를 사용해야만 하는 상황을 그때그때 적절히 판단하여

 

사용하는 것이 결국 정답일 것이다

 

 

 

 

 

  

 

 

 

 

 

 

 

 

 

http://blog.fupfin.com/?p=81



매우 좋은 토론거리다.




결론



1. 인터페이스는 비용이다 그러나 그 비용을 들인 만큼 얻는 가치가 있다면 투자하면 된다  과도한 추상화나 간접화는 피해야 하지만 

상황에 따라 적절한 판단을 통해 인터페이스를 작성해야한다.


 

2. 소프트웨어가 커져갈수록 인터페이스 는 추상화로서 이득을 낼것이다.




마르크스는 이상적인 공산주의 사회를 실현하는 혁명의 주체는 프롤레타리아 착취의 당사자인 노동자들이라  말한다. 노동자들이 일어서 폭력을 통한 국가 전복만이  자본가들의 몰락과 이상적 국가 건설 실현을  가능케 한다고 생각했다.

그러나 다수의 사상가들은 마르크스의 견해와 달리 현실적으로 노동자들에 의한 혁명은 불가능하다는 한계를 지적하였다그의 견해에 한계를 지적한  회의론자들은 노동자들이 그들 문제를 스스로 극복할 역량이 부족하다는 것을 근거로 들었다.

 

 

가난한 이들은 내일을 생각할 여유가 없기 때문에 보수적으로 변한다고급교육의 기회에서 제외되고

사회와 정치적 문제에 대해 숙고할 시간을 박탈당한 노동자들은 자본주의의 구조적 문제를 보지 못하고

다만 피상적인 현실 문제에 집착하게 된다 .   <유한 계급론> - 미국의 사회학자 베블런-

 

공산주의가 지독하게도 물고늘어져서 해결하고자 했던 것은 노동자가 착취당하는 현실이였다.

공산주의는 이러한 착취의 원인을 생산수단의 개인소유로 보았고

 다수의 생산수단을 소유한 자본가들로부터 빼앗아 국유화를 통해 노동자의 정부가 이를 일괄적으로 관리및통제하려 했다.

 

알다시피 공산주의의 이러한 시도는 부정적인 결과를 낳았다.

생산수단의 집중화는 독재정부를 낳았고 독재정부에 의한 통제는 비효율과 정부실패를 보여주었다.

 

-------------------------------------

 

생산수단의 개인소유는 어디까지 인정되어야하는가?

 

소유권0% 주장한 공산주의는 인간의 이기적 욕심이라는 본능을 배제한 댓가로 비참한 국가의 몰락을 교훈으로 남겼고

 

소유권의 자유로움을 주장한 오리지널 자본주의는 소극적 자유를 추구한 야경국가는  가진자와 그렇지 못한자로 나뉘어져  현대사회가 봉건주의사회의 계급구조로 회귀하려 한다는 것을 보여주었다

-----------------------------------------

 

 

생산수단에 고용된 노동자들은 자신의 삶을 노동하는 사용하지만

생산수단을 소유한 자들은 노동에서 자유로워져 자신의 삶을 찾을수 있다.

노동에서 자신의 삶을 찾을 있냐고 반문하는 이들은

노동의 신성함에 대한 강조는 사회 구성원들이 평등한 관계를 유지할때만 의미가 있다는 것을 알아야한다.

 

노동의 대가로 최소한의 삶만을 유지하는 사람들이 존재하는 사회에서 노동의 신성함을 이야기하는 것만큼 비열한 행위는 없다.

 

사장이 직원에게 노동의 신성함에 대해 논하고 노동에서 즐거움을 느끼라는 식의 논리가 웃기지도 않는 이유이다.

 

 

 

자본주의의 갈등 내용은 변화했다 과거 생산수단 소유여부에 대한 갈등이였다면

오늘날에는 주주자본주의는 얼마나 많이 가졌는지에 대한 양적 측면의 갈등이 되었다.

 

시민에게는 의무가 있다. 나의 이익을 추구하는 동시에 계급의 이익을 대변하고 사회의 이익을 고려해야하는 책임이다.l

'Liberal Arts' 카테고리의 다른 글

비정규직의 모순  (0) 2017.03.13

+ Recent posts