본문 바로가기

반응형

분류 전체보기

(696)
왜 나는 사업부터 배웠는가 *개요 유튜브 세바시에서 송성근 씨의 발표를 보고 관심이 생겼습니다. 굉장히 어린 나이에 창업해 맨 땅에 헤딩으로 자라 온 삶이 인상 깊었습니다. 사업을 하면서 겪은 많은 어려움은 어떻게 이겨냈을까? 야수의 심장을 가지는 그의 경험이 무엇이 있을까? 궁금했습니다. '아무리 좋은 제품이라도 고객이 지갑을 열지 않으면 의미가 없구나' 어렵게 만든 제품이었지만 그 아이템은 바로 접었다. 내 것이 아니다 싶으면 과감히 포기할 줄 알아야 한다. 더 큰 가치를 위해 아끼던 것을 미련 없이 희생할 줄 알아야 한다. '내가 만들고 싶은 것을 하면 안 되겠구나. 고객이 지갑을 열고 싶은 것을 만들어야 한다' 실력보다 심리가 승부를 좌우하기도 한다. 졌다고 포기하면 그 자리가 끝이다. 마음가짐이 역량의 한계를 정해버리는 ..
개발자 원칙 *개요 회사 AWS 자격증을 따기 위해서 약 10만 원어치 책을 샀더니 1권의 책을 증정해 준 책이 개발자 원칙 책입니다. 각 CTO급 개발자 리더분들의 자신만의 스토리를 담아낸 책입니다. 이중에 박미정, 박종천, 이동욱(향로)님은 꾸준히 접하고 있었기에 요즘에 어떤 생각을 하시는지 기대가 되었습니다. 또한 잘 알지 못하는 다른 분들의 생각을 엿볼 수 있는 기회였습니다. 책을 읽고 가장 인상 깊었던 장동수님과 김미정 님의 글을 정리해 보겠습니다. 달리는 기차의 바퀴를 갈아 끼우기(09) - 장동수 좋은 코드는 유연성이 있습니다. 그러나 유연성이 있고 어려운 코드보다는 유연성이 없더라도 쉬운 코드가 더 좋은 코드입니다. 유연성에는 추상화가 필요합니다. 유연성을 위해서 시작한 추상화가 재사용성과 잘못 만나면..
스프링 AOP (3) - 실무 주의사항 프록시 내부호출 문제 스프링은 프록시 방식의 AOP를 사용합니다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상객체(Target)을 호출해야 합니다. 그래야 어드바이를 통해서 정상적으로 호출되며 직접 호출하면 어드바이스가 적용되지 않습니다. 하지만, 대상 객체(Target) 내부에서 메서드 호출이 발생하면 프록시를 거치지 않아 직접 호출을 하고 제대로 AOP가 적용되지 않습니다. @Aspect public class CallLogAspect { @Before("execution(* hello.aop.internalcall..*.*(..))") public void doLog(JoinPoint joinPoint) { log.info("aop={}", joinPoint.getSignature()); ..
영어독서가 취미입니다 *개요 영어공부는 하나의 언어이기 때문에 왕도가 끝이 없습니다. 계속 보거나 듣지 않으면 까먹고 지칩니다. 몇 년 전에 축구 감독 무리뉴의 책을 해외배송으로 약 3권 정도 시켰었습니다. 그런데 영어가 너무 장벽이 높다는 생각에 읽지도 못하고 새책으로 구석에만 있던 것을 최근에 발견했습니다. 어떻게 하면 영어에 취미를 붙이고 관심을 가져볼까? 고민하며 책을 읽었습니다. 완벽한 영어란 없다 '어쩌면 완벽한 영어란 건 애초에 존재하지 않는 건 아닐까', 비영어권 외국인의 발음이 미국인처럼 될 수 없으며, 될 필요도 없어요. 100번 공부법, 유튜브 공부법, TED 공부법, 외국인과 잘 말하는 방법, 이러한 모든 방법들이 누군가에는 맞고, 누군가에게는 맞지 않을 수 있습니다. 하지만 분명한 건 이 모든 것들이 ..
물류 재고 관리 개선하기 개요 회사에서 재고 실사를 하면 전산과 실물재고가 다른 경우가 있었습니다. 이 문제를 해결하기 위해 현재 상황을 분석하여 원인을 파악하고 개선한 내용을 정리합니다. 1. 지점별 제품/부품 추천 갯수 개선하기 문제점 각 지점에서 고객에게 설치를 하기 위해 제품, 부품 재고를 주문하는데 재고가 많이 남거나, 부족해서 재고가 필요한 곳에 제대로 전달되지 못하거나 자주 주문해야 하는 경우가 있었습니다. 이를 개선해 한 번 주문할 때 적정 재고를 주문할 수 있도록 권장 주문수량, 최수 주문수량을 추가했습니다. 그럼에도, 각 지점에서 설치, 교환에 필요한 재고들을 주문하는데 수량 제한이 없다보니 재고가 마이너스로 관리되는 경우들이 있었습니다. 예를 들어, 창고에 있는 제품 A가 재고가 5개밖에 없는데 3개의 지국에..
스프링 AOP (2) - AOP 구현 및 예제 개요 스프링 AOP (1) 편에서는 JDK 동적 프록시, CGLIB와 스프링 프록시, 빈 후기처리를 통해 프록시의 생성과정 및 작동 방법에 대해 배웠습니다. 이번에는 스프링에서 AOP의 개념 및 사용법에 대해서 알아보겠습니다. AOP(Aspect Of Programming)이란? AOP의 Aspect는 '관점'이라는 뜻으로 AOP는 이름 그대로 애플리케이션에서 기능 하나하나를 횡단 관심사의 관점으로 보는 것입니다. AOP는 OOP 지향 프로그래밍에서 횡단 관심사를 깔끔하게 처리하기 위해 등장했습니다. 핵심 기능과 분리하여 공통의 부가 기능들을 AOP에 정의합니다. 이를 Aspect라 하며 스프링에서 제공하는 advisor는 advice(부가 기능 정의)와 pointcut(어디에 적용 할 것인가)을 가지고..
스프링 AOP (1) - 동적 프록시 개요 스프링에서 제공하는 AOP의 기능과 원리를 알아보겠습니다. 리플렉션, JDK 동적 프록시와 CGLIB 소개를 시작으로 스프링이 지원하는 프록시와 빈 후기처리를 알아보겠습니다. 리플렉션 리플렉션은 런타임에 클래스와 메서드의 메타정보를 사용해 애플리케이션을 동적으로 유연하게 만드는 기술입니다. 리플렉션은 스프링 프록시의 기본이 되는 기술이므로 개념을 알아야 합니다. 리플렉션은 런타임에 원하는 동작을 할 수 있다는 장점이 있지만 컴파일 시점의 오류를 잡을 수 없으므로 특별한 경우를 제외하고는 사용하면 안 됩니다. JDK 동적 프록시와 CGLIB 스프링에서 리플렉션 기반으로 동적 프록시를 사용하면 런타임 시 개발자를 대신하여 프록시를 생성해주고 다양한 동작을 할 수 있습니다. JDK 동적 프록시와 CGLI..
기존 로그를 스프링 AOP 로 개선하기 개요 회사에 로그가 상세하게 기록되지 않아서 오류를 확인하기 힘들었습니다. AOP를 활용해 비지니스 코드에 따로 로그를 작성하지 않고도 원하는 곳에 작성할 수 있도록 개발했습니다. 기존의 로그 방식 Front, Admin 2개의 프로젝트가 있는데 이 중에 Admin 프로젝트는 로그가 아래처럼 각 Controller의 시작시에 찍혀 있습니다. 이는 비지니스 로직에 의미없는 불필요한 코드 추가이며 새로운 메서드가 생성될 때마다 수동으로 작성해야 합니다. 또한 로그 규칙이 변경된다면 모든 메서드의 로그 코드를 수정해야 하는 불편함이 있습니다. 로그는 각 메서드마다 공통으로 기능이 필요한 부분으로 관점 지향 프로그래밍이 필요합니다. 따라서 스프링 AOP를 사용해서 로그 체계를 새롭게 잡았습니다. 스프링 AOP의..

반응형