블로그

여언주

[인프런 워밍업 스터디 클럽 2기 BE] 두 번째 발자국

2주차 5/7 - 5/10Section 3 역할의 분리와 스프링 컨테이너목표좋은 코드가 왜 중요한지 이해하고, 원래 있던 Controller 코드를 보다 좋은 코드로 리팩토링한다.스프링 컨테이너와 스프링 빈이 무엇인지 이해한다.스프링 컨테이너가 왜 필요한지, 좋은 코드와 어떻게 연관이 있는지 이해한다.스프링 빈을 다루는 여러 방법을 이해한다.스프링 컨테이너스프링 빈 (Spring Bean)서버가 시작되면, 스프링 서버 내부에 거대한 컨테이너를 만들게 된다.컨테이너 안에는 클래스가 들어가게 된다. 이때 다양한 정보도 함께 들어있고, 인스턴스화도 이루어진다.→ 스프링 컨테이너 안으로 들어간 클래스를 스프링 빈이라고 한다.cf) JdbcTemplate도 Dependency (의존성)에 의해 스프링 빈으로 등록되어 있다.서버가 시작되면스프링 컨테이너(클래스 저장소)가 시작된다.기본적으로 많은 스프링 빈들이 등록된다. 예를 들어, JdbcTemplate이 등록된다.우리가 설정해준 스프링 빈이 등록된다. 예를 들어, UserController가 등록된다.이때 필요한 의존성이 자동으로 설정된다. 예를 들어, UserController를 만들 때 JdbcTemplate을 알아서 넣어준다.Repository와 Service 스프링 빈 등록하는 방법Repository를 스프링 빈으로 등록할 때는 @Repository 어노테이션 사용Service를 스프링 빈으로 등록할 때에는 @Service 어노테이션 사용 ⇒ UserController는 UserService가 스프링 빈이니 굳이 직접 new 연산자를 통해 인스턴스화해줄 필요가 없다! 또한 UserRepository가 JdbcTemplate을 직접 가지고 있기 때문에 JdbcTemplate도 가지고 있을 필요도 없어진다.스프링 컨테이너를 왜 사용할까?스프링 컨테이너를 이용하는 이유컨테이너가 BookService를 대신 인스턴스화하고, 그 때 알아서 BookMemoryRepository 혹은 BookMySqlRepository 중 하나를 BookRepository로 결정해준다!= 제어의 역전 (IoC, Inversion of Control)이때 컨테이너가 BookService를 만들어 줄 때 BookMemoryRepository와 BookMySqlRepository 중 하나를 선택해서 넣어주는 과정= 의존성 주입 (Dependency Injection)- @Primary 어노테이션을 이용해 우선권을 제어할 수 있다.책 이름을 메모리에 저장하는 API 예시controller > book > BookController.javapackage com.group.libraryapp.controller.book; import com.group.libraryapp.service.book.BookService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class BookController { // new BookService() 안해도 됨! private final BookService bookService; // constructor public BookController(BookService bookService) { this.bookService = bookService; } @PostMapping("/book") public void saveBook() { bookService.save(); } } service > book > BookService.javapackage com.group.libraryapp.service.book; import com.group.libraryapp.repository.book.BookRepository; import org.springframework.stereotype.Service; @Service // 어노테이션 추가 public class BookService { private final BookRepository bookRepository; public BookService(BookRepository bookRepository) { this.bookRepository = bookRepository; } public void save() { bookRepository.save(); } } repository > book > BookMemoryRepository.javapackage com.group.libraryapp.repository.book; import org.springframework.stereotype.Repository; @Repository // 어노테이션 추가 public class BookMemoryRepository implements BookRepository{ @Override public void save() { System.out.println("Memory Repository"); // 테스트용 출력 } } repository > book > BookMySqlRepository.javapackage com.group.libraryapp.repository.book; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Repository; @Primary // 우선권을 부여하는 어노테이션 @Repository public class BookMySqlRepository implements BookRepository { @Override public void save() { System.out.println("MySql Repository"); // 테스트용 출력 } } 스프링 컨테이너를 다루는 방법빈을 등록하는 방법@Configuration클래스에 붙이는 어노테이션@Bean을 사용할 때 함께 사용해줘야 한다!@Bean메소드에 붙이는 어노테이션메소드에서 반환되는 객체를 스프링 빈에 등록한다.@Component주어진 클래스는 ‘컴포넌트’로 간주1) 컨트롤러, 서비스, 리포지토리가 모두 아니고 2) 개발자가 직접 작성한 클래스를 스프링 빈으로 등록할 때 사용@Service + @Repository vs @Configuration + @Bean개발자가 직접 만든 클래스를 스프링 빈으로 등록할 때 => @Service + @Repository외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때 => @Configuration + @Bean스프링 빈을 주입받는 방법(가장 권장) 생성자를 이용해 주입받는 방식@RestController public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; }setter와 @Autowired 사용@Autowired public void setUserController(UserService userService) { this.userService = userService; }→ 누군가 setter를 사용하면 오작동할 수 있다.필드에 직접 @Autowired 사용@Autowired private final UserService userService;→ 테스트를 어렵게 만드는 요인이다.스프링 빈의 우선순위 설정@Qualifier 사용스프링 빈을 사용하는 쪽에서만 쓰면, 빈의 이름을 적어주어야 한다.양쪽 모두 사용하면, @Qualifier끼리 연결된다!@Primary vs @Qualifier → 사용하는 쪽에서 직접 적어준 @Qualifier가 이긴다!Section 4 생애 최초 JPA 사용하기목표문자열 SQL을 직접 사용하는 것의 한계를 이해하고, 해결책인 JPA, Hibernate, Spring Data JPA가 무엇인지 이해한다.Spring Data JPA를 이용해 데이터를 생성, 조회, 수정, 삭제할 수 있다.트랜잭션이 왜 필요한지 이해하고, 스프링에서 트랜잭션을 제어하는 방법을 익힌다.영속성 컨텍스트와 트랜잭션의 관계를 이해하고, 영속성 컨텍스트의 특징을 알아본다.Spring Data JPA를 사용한 데이터베이스 조작JPA (Java Persistence API) 개념Persistence (영속성 ) : 데이터를 생성한 프로그램이 종료되더라도 데이터가 영구적인 속성을 갖는 것API : 정해진 규칙JPA : 객체와 관계형 데이터베이스의 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java 진영의 규칙 / ORM (Object-Relational Mapping) 기술 표준JPA를 실제 코드로 작성한 가장 유명한 프레임워크 = Hibernate (내부적으로 JDBC 사용) Entity = 저장되고 관리되어야 하는 데이터user 객체에 @Entity 어노테이션 붙여주기@Entity를 붙이게 되면, 스프링이 이를 인식하여 서버가 동작할 때, User 객체와 user 테이블을 같은 것으로 간주@Column 어노테이션 : column에 붙여주기, 다양한 옵션 (필드에 null이 들어갈 수 있는지의 여부, 길이 제한, DB에서의 column 이름 설정 등) 최초로 JPA를 적용할 때application.yml 파일에 설정 추가!Spring Data JPA를 이용해 자동으로 쿼리 날리기 (기능 리팩토링)save : 주어지는 객체를 저장하거나 업데이트해준다.findAll : 주어지는 객체가 매핑된 테이블의 모든 데이터를 가져온다.findById : id를 기준으로 특정한 1개의 데이터를 가져온다.User : 이름을 기준으로 유저 데이터를 조회해 유저 객체를 반환한다. (유저 정보가 없다면, null)findByName : name을 기준으로 특정한 1개의 데이터를 가져온다. (함수 이름만 작성하면 알아서 SQL 조립)Spring Data JPA의 추가적인 쿼리 작성법 조사 및 연습!트랜잭션과 영속성 컨텍스트트랜잭션여러 SQL을 사용해야 할 때 한 번에 성공시키거나, 하나라도 실패하면 모두 실패시키는 기능→ 쪼갤 수 없는 업무의 최소 단위commit : 트랜잭션이 시작된 후 사용된 SQL을 성공적으로 반영rollback : 트랜잭션을 시작하고 사용한 SQL을 모두 취소UserService에 트랜잭션 적용메소드에 @Transactional 어노테이션 붙여주기주의) org.springframework.transaction.annotation.Transactional데이터의 변경이 없고, 조회 기능만 있을 때는 readOnly 옵션영속성 컨텍스트테이블과 매핑된 Entity 객체를 관리/보관하는 역할스프링에서는 트랜잭션을 사용하면 영속성 컨텍스트가 생겨나고, 트랜잭션이 종료되면 영속성 컨텍스트가 종료된다.영속성 컨텍스트의 역할변경 감지 (Dirty Check) : 영속성 컨텍스트 안에 불러와진 Entity는 명시적으로 save를 해주지 않더라도 알아서 변경을 감지해 저장할 수 있게 해준다.쓰기 지연 : 트랜잭션이 commit 되는 시점에 여러 SQL을 모아서 한 번만 날린다.1차 캐싱 : ID를 기준으로 Entity를 기억한다/Section 5 책 요구사항 구현하기목표책 생성, 대출, 반납 API를 온전히 개발하며 지금까지 다루었던 모든 개념을 실습해본다.객체지향적으로 설계하기 위한 연관관계를 이해하고, 연관관계의 다양한 옵션에 대해 이해한다.JPA에서 연관관계를 매핑하는 방법을 이해하고, 연관관계를 사용해 개발할 때와 사용하지 않고 개발할 때의 차이점을 이해한다. 조금 더 복잡한 기능을 API로 구성하기책 생성 API, 대출 기능, 반납 기능 구현 과제과제 4과제 52주차 회고이번 주차에 스프링의 굵직굵직한 개념들이 등장했는데, 코드 예시와 함께 단계별로 적용해보는 강의 내용이 이해에 도움이 많이 되었다. 특히 과제를 해결하고자 고민하는 과정에서 재미있고 자신감도 붙는 것 같다. 강의의 흐름을 따라가면서 더 공부해야 할 것들이 차곡차곡 정립되고 있다. 그때그때 찾아보고 적어두고 지식 불리기 중! 클린 코드 책도 읽겠다는 목표도 세웠다.벌써 절반을 훌쩍 넘어버렸으니 다음 주는 더더 화이팅!

백엔드인프런워밍업클럽백엔드

삼각커피포리

[인프런 워밍업 스터디 클럽 1기] 디자인 2주차 발자국

두번째 발자국시간이 너무나도 부족했던 2주차였다. 퇴근 후에 남는 시간을 모두 강의와 미션에 할애했는데도 불구하고 시간이 많이 소요되는 2주차였다. 아직 미션을 완주하지 못 했지만 이번주를 되돌아보는 발자국을 작성해야겠다. Day8 피그마 컴포넌트 기초 배우고 입력 컴포넌트 만들어보기 드디어 모든 컴포넌트의 기초인 버튼 컴포넌트를 만들어 볼 수 있게 된 시간이라서 무척 기대했다. 왜냐면 내가 실무에서 만든 버튼 스타일과 볼드님의 버튼 만드는 순서나 과정이 어떻게 다른지 궁금했기 때문이다. 버튼 컴포넌트에서 내가 만든 것과 볼드님의 스타일 중 다른 것은 바로 아이콘과 레이블의 배치였다. 나는 label onlly, icon+label, label+icon 이런식으로 버튼 타입을 구성했었는데, 볼드님은 LeadingIcon+Label+TrailingIcon으로 구성했다는 점이 달랐다. 이 점이 훨씬 더 경제적이고 아이콘을 불린 프로퍼티로 관리할 수 있어서 편리한 방법이라는 생각이 들었다.그리고 포커스 버튼 상태를 포커스 링 컴포넌트를 만들어서 앱솔루트 포지션으로 만드는 점도 인상깊었다. 나는 이전까지 버튼의 포커스 상태는 직접 스트로크를 outline 상태로 줘서 만들었는데 포커스링을 이용하여 만드는 포커스 상태는 더 눈에 잘 띄고 배리언트 관리가 용이하다고 느껴졌다.그리고 체크박스와 라디오버튼은 단독으로 쓰이기도 하지만 레이블과 함께 결합해서 미리 컴포넌트를 구성해두는 방법을 배우게 되었다. 토글 스위치에는 버튼에 아이콘을 넣을 생각조차 못 했는데 강의를 통해서 ON/OFF 상태에 아이콘을 넣어서 좀 더 명확하게 표현 할 수 있다는 것을 배웠다. 그리고 보너스 미션으로 설문조사 폼을 만들어봤는데, 만들고 나니 컴포넌트를 어떻게 활용해야 겠다는게 감이 잡히게 되었다. Day9 입력 컴포넌트 나머지 만들고 마지막 점검하기 IconPlaceholder라는 지식을 배우게 되었다. 그동안 입력 필드에 들어가는 텍스트만 플레이스홀더라고 생각했었지 아이콘은 플레이스 홀더라는 생각을 못했는데 이번 강의를 들으면서 새롭게 알게되었다. 입력필드도 생각보다 다양한 상태가 있어야 한다는 것을 알게 되었다. 그동안 상태는 버튼만 많다고 생각했는데 입력필드도 총 7가지의 상태(디폴트, 호버, 프레스, 셀렉트, 입력, 에러, 디스에이블)를 만들었더니 내가 실무에서 빼먹은 상태가 무엇인지 알게 되었다.텍스트필드 다음에 만든 텍스트 에리어에서는 현재 카운트와 토탈 카운트를 따로따로 구성한다는 것을 알았다. 그동안은 모두 현재 카운트와 토탈카운트를 하나의 텍스트 입력으로 퉁 쳤는데 이렇게 나눠서 구성하고 레이어 이름을 지으니 개발자와 소통하기 더 편할 것 같다는 생각이 들었다.셀렉트 그룹은 가장 배우고 싶었던 컴포넌트인데 배우고 나니까 바로 실무에 적용해야 겠다는 생각이 들었다. 왜냐하면 현재 실무에서 내가 만든 셀렉트는 어디가 잘 못 된 지 모르겠는데 오토레이아웃으로 하면 틀어지고 프레임으로 해야만 선택한 상태를 볼 수 있는 상태다. 그런데 볼드님의 방식으로 셀렉트를 만들고 인스턴스를 테스트해보니 아이콘도 붙일 수 있고, 체크박스도 붙일 수 있고, 라디오버튼도 붙을 수 있고 심지어는 포커스 상태도 만들 수 있는 아주 이상적인 셀렉트 박스를 만들 수 있었다.그리고 보너스 미션으로 회원가입 폼을 간단하게 만들어봤는데 이 날 배운 모든 컴포넌트를 이리저리 조합하니까 회원가입 폼을 쉽게 만들 수 있어서 매우 편했다. 잘 만든 컴포넌트를 UI를 빠르게 디자인 할 수 있는 아주 좋은 기초 공사라는 생각이 들었다.보너스미션으로 제작한 회원가입 폼 여담나는 1주차 미션을 미션보드에서 진행하지 못 했기 때문에 이전에 만든 스타일 가이드를 모두 퍼블리시해서 2주차 과제부터는 미션보드에서 작업 할 수 있었다. 1주차부터 미션보드를 활용한 사람들과는 조금 다르게 이번주 미션을 했지만 그래도 덕분에 퍼블리시 기능을 이용해 볼 수 있는 좋은 기회가 되었다고 생각한다.아직 미션7과 8을 모두 끝내지 못 했지만 한 주의 마무리를 하기 위하여 미션하며 느꼈던 점을 위주로 발자국을 작성했다. 돌아오는 주에 좀 더 시간을 투자하여 미션을 진행해야겠다. 

UX/UI피그마figma인프런워밍업클럽컴포넌트디자인

aabb

[인프런 워밍업 스터디 1기 디자인] 2주차 발자국

2 주차 / 5.7 - 5.10 / 컴포넌트 만들기 1 KEEP컴포넌트 만드는 게 점점 익숙해지고 있다.2주차 할일을 3주차로 미루지 않고 끝까지 해냈다😊강의를 먼저 쭉 듣고 두번째는 음소거 해 놓고 같이 실습하니까 확실히 시간이 절약되었다. PROBLEMcontrast 플러그인을 통해 명도 대비를 확인하는 과정에서 primary 컬러의 대비가 낮아 좀 더 진하게 수정하는 등 변경사항이 많아 시간이 많이 소요되었다.ㄴ 컬러를 수정하면서 전반적으로 어두워져서 내가 생각한 primary 컬러랑 멀어지는 게 난감했다.ㄴ 전체적으로 컬러를 뒤엎고 싶기도 했지만 너무 오래 걸릴 것 같아 일부 수정하는 걸로 마무리했다. /명도 대비를 확인하면서 다른 브랜드들은 어떤지 확인해 봤는데, G마켓 디자인시스템을 살펴보니 primary 컬러를 CTA 버튼에 사용하지 않고 action 컬러를 별도로 설정하여 CTA에 적용하는 점이 인상적이었고 네이버를 포함해서 의외로 꽤 많은 브랜드들이 CTA버튼의 명도 대비를 지키지 않는 걸 확인하면서 꼭 지키지 않아도 되는 건지 헷갈렸다..추후 bold님께 질문해야겠다! typography를 Notosans KR에 행간 140%으로 잡고 가니까 확실히 너무..불편하다. 컴포넌트를 만들면서 Roboto도 따로 써야되고.. 수정이 필요해 보인다. TRY사이드 프로젝트에 배운 디자인시스템 적용해 보기  

UX/UI워밍업클럽디자인시스템

여언주

[인프런 워밍업 스터디 클럽 1기 BE] 첫 번째 발자국

1주차 4/29 - 5/3Section 1 생애 최초 API 만들기목표스프링 프로젝트를 설정해 시작하고 실행할 수 있다.서버란 무엇인지, 네트워크와 HTTP, API는 무엇인지, JSON은 무엇인지 등 서버 개발에 필요한 다양한 개념을 이해한다.스프링 부트를 이용해 간단한 GET API, POST API를 만들 수 있다.@SpringBootApplication과 서버@SpringBootApplication = 어노테이션어노테이션 : Java의 문법으로 @ 뒤에 문자열을 붙이는 것 → 마법같은 일을 해주는 기호서버란?어떠한 기능을 제공하는 프로그램 /그 프로그램을 실행시키고 있는 컴퓨터네트워크란 무엇인가?포트 (port): 그 컴퓨터 안에 동작하는 여러 프로그램 중에 특정한 하나의 프로그램을 가리키는 것 (컴퓨터에서 돌고 있는 여러 프로그램 중 하나만 특정)IP 주소 : 컴퓨터마다 갖는 고유한 주소도메인 이름 : 244.66.51.9라는 외우기 어려운 숫자 대신, 사람이 외우기 쉬운 이름을 사용하는 것 ex) 도메인 이름 : spring.com, port : 3000→ Domain Name System (DNS)HTTP와 API란 무엇인가?HTTP (HyperText Transfer Protocol) : 데이터를 주고 받는 표준 → 컴퓨터 간의 통신HTTP Method : GET, POST, PUT, DELETEHTTP 요청 : HTTP Method (GET, POST)와 Path (/portion)가 핵심 / 쿼리와 바디로 데이터를 전달HTTP 응답 : 상태 코드가 핵심API (Application Programming Interface) :정해진 약속을 하여, 특정 기능을 수행하는 것GET API 개발하고 테스트하기@RestController public class CalculatorController { @GetMapping("/add") // GET /add public int addTwoNumbers( @RequestParam int number1, @RequestParam int number2 ) { return number1 + number2; } }POST API 개발하고 테스트하기@PostMapping("/multiply") // POST /multiply public int multipltTwoNumbers(@RequestBody CalculatorMultiplyRequest request) { return request.getNumber1() * request.getNumber2(); }유저 생성 API 개발유저 생성 API 스펙HTTP Method : POSTHTTP Path : /userHTTP Body (JSON){ "name": String (null 불가능), "age": Integer } 결과 반환 X (HTTP 상태 200 OK이면 충분)private final List<User> users = new ArrayList<>(); @PostMapping("/user") // POST /user public void saveUser(@RequestBody UserCreateRequest request) { users.add(new User(request.getName(), request.getAge())); }유저 조회 API 개발과 테스트유저 조회 API 스펙HTTP Method : GETHTTP Path : /user쿼리 : 없음결과 반환[{' "id": Long, "name": String (null 불가능), "age": Integer }, ...] @GetMapping("/user") public List<UserResponse> getUsers() { List<UserResponse> responses = new ArrayList<>(); for (int i = 0; i < users.size(); i++) { responses.add(new UserResponse(i + 1, users.get(i))); } return responses; }Section 2 생애 최초 Database 조작하기목표 1. 디스크와 메모리의 차이를 이해하고, Database의 필요성을 이해한다.2. MySQL Database를 SQL과 함께 조작할 수 있다.3. 스프링 서버를 이용해 Database에 접근하고 데이터를 저장, 조회, 업데이트, 삭제할 수 있다.4.API의 예외 상황을 알아보고 예외를 처리할 수 있다.Database와 MySQL컴퓨터의 핵심 부품 : CPU (연산 담당), RAM (메모리, 단기기억), DISK (장기기록)서버를 실행시켜 API를 동작시키기까지 일어나는 일서버 실행 → DISK의 코드 정보 RAM으로 복사 → API 실행 → 연산 수행 (CPU-RAM)Database :데이터를 구조화시켜 저장하는 장치RDB (Relational Database) : MySQL데이터를 표처럼 구조화시켜 저장하는 장치SQL (Structured Query Language) :표처럼 구조화된 데이터를 조회하는 언어MySQL에 접근하는 방법 터미널에서 mysql -u root -p + 비밀번호비밀번호 없으면 mysql -u rootMySQL에서 테이블 만들기DDL (Data Definition Language) : 데이터를 정의하기 위한 SQLMySQL 명령어데이터베이스 생성, 조회, 삭제create database [데이터베이스 이름]; show databases; drop database [데이터베이스 이름]; 테이블 생성, 조회, 삭제use [데이터베이스 이름]; show tables; create table [테이블 이름] ( [필드1 이름] [타입] [부가조건], [필드2 이름] [타입] [부가조건], ... primary key ([필드 이름]) ); drop table [테이블 이름]; 예시create table fruit ( id bigint auto_increment, name varchar(20), price int, stocked_date date, primary key (id) );SQL의 데이터 타입정수 타입tinyint : 1바이트 정수int : 4바이트 정수bigint : 8바이트 정수실수 타입double : 8바이트 실수decimal(A, B) : 소수점을 B개 가지고 있는 전체 A 자릿수 실수문자열 타입char(A) : A글자가 들어갈 수 있는 문자열varchar(A) : 최대 A글자가 들어갈 수 있는 문자열날짜, 시간 타입data : 날짜, yyyy-MM-dd 형식으로 들어간다.time : 시간, HH:mm:ss 형식으로 들어간다.datetime : 날짜와 시간을 합친 형식, yyyy-MM-dd HH:mm:ss 형식으로 들어간다.테이블의 데이터 조작하기DML (Data Manipulation Language) : 데이터를 조작하기 위한 SQLCRUD데이터를 넣는다 (생성 - Create) 조회한다 (읽기 - Retrieve or Read)수정한다 (업데이트 - Update)삭제한다 (제거 - Delete)Createinsert into [테이블 이름] (필드1이름, 필드2이름, ...) values (값1, 값2, ...) insert into fruit (name, price, stocked_date) values ('사과', 1000, '2023-01-01');Read select * from [테이블 이름]; select name, price from fruit; # 조건을 통해 필터 적용 select * from [테이블 이름] where [조건]; select * from fruit where name = '사과'; # and, or select * from fruit where name = '사과' and price <= 2000; # beween 예시 (가격이 1000~2000원인 과일) select * from where price between 1000 and 2000; # in 예시 (이름이 사과이거나 수박인 과일) select * from fruit where name in ('사과', '수박'); # not in 예시 (이름이 사과가 아닌 과일) select * from fruit where name not in ('사과');Updateupdate [테이블 이름] set 필드1이름=값1, 필드2이름=값2, ... where [조건]; # 모든 사과의 가격을 2000 -> 1000원으로 변경 update fruit set price=1500 where name = '사과';Deletedelete from [테이블 이름] where [조건]; delete from fruit where name = '사과';Section 3 역할의 분리와 스프링 컨테이너목표좋은 코드가 왜 중요한지 이해하고, 원래 있던 Controller 코드를 보다 좋은 코드로 리팩토링한다.스프링 컨테이너와 스프링 빈이 무엇인지 이해한다.스프링 컨테이너가 왜 필요한지, 좋은 코드와 어떻게 연관이 있는지 이해한다.스프링 빈을 다루는 여러 방법을 이해한다.Clean Code와 Controller-Service-Repository 3단 분리Clean Code 중함수는 최대한 작게 만들고 한 가지 일만 수행하는 것이 좋다.클래스는 작아야 하며 하나의 책임만을 가져야 한다.Controller가 하고 있던 역할 분리API의 진입 지점으로써 HTTP Body를 객체로 변환하고 있다. → Controller의 역할현재 유저가 있는지, 없는지 등을 확인하고 예외 처리를 해준다. → Service의 역할SQL을 사용해 실제 DB와의 통신을 담당한다. → Repository의 역할코드 리팩토링 예시 - UPDATE API// Controller @PutMapping("/user") public void updateUser(@RequestBody UserUpdateRequest request) { userService.updateUser(request); } // Service public void updateUser(UserUpdateRequest request) { if (userRepository.isUserNotExist(request.getId())) { throw new IllegalArgumentException(); } userRepository.updateUserName(request.getName(), request.getId()); } // Repository public boolean isUserNotExist(long id) { String readSql = "SELECT * FROM user WHERE id = ?"; return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, id).isEmpty(); } public void updateUserName(String name, long id) { String sql = "UPDATE user SET name = ? WHERE id = ?"; jdbcTemplate.update(sql, name, id); }과제과제 2과제 31주차 회고스터디가 갖는 가장 큰 장점! 공통의 목표를 갖고 모인 다른 스터디원들과 함께 공부하니까 동기부여가 된다. 혼자였으면 이런 꾸준함이 덜하지 않았을까? 그리고 멘토님도 계셔서 유익했던 라이브세션과 강의를 듣는 동안의 든든함이 스터디에 참여하기 잘했다라는 생각이 들게 한다.그리고 강의 너무 좋다..! 백엔드 개발을 지망하면서 다른 언어를 먼저 접하고, 자바와 스프링을 가장 늦게 배우고 있는 상황이었다. 백엔드 개발의 전반부터 다루고 시작하니 조각조각 알던 지식들이 한 줄기로 모여서 흐름을 잡기에 너무 좋았다. 다만 첫주에 직무 교육과 개인 일정이 겹쳐 제공된 진도를 다 수행하지 못하였는데, 2주차에 시간을 더 내어 보완하도록 할 것이다. SQL은 최근 정처기 실기에서 주요 문법 위주로 빠르게 훑었었는데 직접 실습하니까 복습도 되고 더 기억에도 남는 것 같다. 그리고 자바 공부가 더 필요하다는 것을 느껴 약간 미뤄두었던 '이것이 자바다' 완독을 곧 다시 시작할 것 같다.. 2주차엔 더더 화이팅! 😀

백엔드인프런워밍업클럽백엔드

꾸이

[인프런 워밍업 스터디 1기 디자인] 2주차 발자국

2주차는 확실히 쉽지 않았다. 휴일이 많다고 여유롭게 생각했었는데 휴일이 많다는 말은 약속이 생긴다는 말이다. 때문에 오히려 시간에 쫓겼다. 저번주의 보완할 점 중 "강의 메모 이외에 느낀 점 그때 그때 작성하기"가 있었는데, 강의 메모도 제대로 못했던 것 같아 많이 아쉽다. 그래도 어떻게든 스케줄에 맞춰 이번주 공부를 마무리해서 그 과정을 작성한다. 📖 강의 요약Day 7 중간점검 : 특강 및 LIVE QnA5월 4일에는 중간 점검 특강이 있었다. 네이밍 컨벤션, 아이콘, 멀티 에딧과 관련된 내용이었다. Naming Convention먼저 네이밍 컨벤션시 팁을 알려주셨다. 항상 신경쓰려고 하는데 놓치는 부분이다. 네이밍 컨벤션은 코드에서 사용되는 명명 규칙이다. snake_case, camelCase, PascalCase, kebab-case 등이 있다. 개발자의 이름 짓는 법, 네이밍 컨벤션 이라는 글에 자세히 설명되어 있다. 그중 camelCase 를 일반적으로 선호한다고 하셨는데, 이유가 궁금해서 더 조사해봤다.❓ camelCase가 디자인 시스템에서 일관된 네이밍 컨벤션을 적용할 때 유용한 방법인 이유가독성: camelCase는 여러 단어를 하나의 식별자로 결합할 때 각 단어의 시작 부분을 대문자로 표시하여 가독성을 높인다.일관성: camelCase를 사용하면 모든 변수, 함수, 클래스 등에 동일한 네이밍 규칙을 적용할 수 있다.자동완성 및 검색: 대부분의 통합 개발 환경(IDE)은 camelCase를 사용하여 자동 완성 및 검색 기능을 제공한다. 따라서 camelCase를 사용하면 개발자가 코드를 더 쉽게 작성하고 탐색할 수 있다.통합성: camelCase는 다양한 프로그래밍 언어 및 기술 스택에서 일반적으로 사용되는 네이밍 컨벤션이다. 이는 프로젝트를 다른 팀원과 공유하거나 외부 라이브러리 및 프레임워크와 통합할 때 유용하다.(ChatGPT 3.5 의 답변을 인용함) Icons그 다음으로는 아이콘을 선이 아니라 면으로 작업해야 하는 이유, 그리고 면 작업시 팁들을 들었다. 이게 특강 중 핵심 내용이었는데, 정말 꿀팁이었다. 특강자료는 수강생들만 받을 수 있었던 것 같아 해당 내용은 생략한다. Multi Edit강의 녹화될 당시 없었던 기능이라 추가 설명해주셨다. 알고있던 기능이지만 알고있다고 생각하는 것들이 원래 가장 무섭기 때문에... 공식 문서를 한 번 살펴보고 체크해봐야 할 것 같다.❗공식 플레이그라운드는 이쪽이다. → Multi-edit playground  3. 컴포넌트 만들기 위한 준비본 강의로 돌아가, 섹션 3에서는 컴포넌트를 만들기 전 컴포넌트에 대한 기본 설명과 준비 방법을 배웠다.  컴포넌트의 용어에는 컴포넌트 세트, 베리언트, 프로퍼티, 값이 있다. 컴포넌트 세트(Component Set)는 컴포넌트 안에 여러 컴포넌트를 가지고 있는 것을 말한다. 베리언트(Variant)는 컴포넌트 세트 안에 있는 하위 컴포넌트 각각을 뜻한다. 프로퍼티(Property)는 카테고리처럼 컴포넌트 내부의 요소들을 구분한다. 값(Value)은 프로퍼티 안의 내용물이다. ㅤ그 중 프로퍼티는 불린 프로퍼티, 텍스트 프로퍼티, 인스턴스 스왑, 베리언츠 프로퍼티가 있다. 불린 프로퍼티(Boolean Property)는 true, false 값으로 on, off를 조정한다. 텍스트 프로퍼티(Text Property)는 텍스트의 값을 수정한다. 인스턴스 스왑 프로퍼티(Instance Swap Property)는 다른 인스턴스로 교체할 수 있는 프로퍼티다. 마지막으로 베리언츠 프로퍼티는 (Variant Property) 다양한 상태, 스타일을 적용할 수 있는 프로퍼티다. 컴포넌트를 만드는 순서는 다음과 같다.기본 싱글 컴포넌트 만들기 : 배리언트 프로퍼티를 제외한 모든 프로퍼티 등록인스턴스 복사 후 테스트 : 리사이징, 프로퍼티 등배리언츠 프로퍼티 만들기 : 상태, 형태 등 베리언츠 프로퍼티 등록하기테스트 : 베리언츠 이름, 순서 체크내부 인스턴스의 프로퍼티를 가져오기 입력, 디스플레이 컴포넌트를 만든 뒤 이걸 보니 감회가 다른데, 모든 단계가 정말 중요하다. 4. 입력(Input) 컴포넌트 만들기이제부터는 본격적으로 컴포넌트 만들기 공장에 들어간다. 컴포넌트 만들기는 입력, 디스플레이, 피드백, 네비게이션의 4가지 섹션으로 구분되어있다. 역할/목적에 따라서 분류하신듯 하다. 해당 섹션들끼리 만드는 방식, 필요한 요소들이 비슷해서 따라 만들기 쉬웠다.  HTML의 input은 MDN에서 다음과 같이 정의한다(편의상 HTML의 정의를 가져왔으며 디자인 시스템에서의 의미는 다를 수 있다). 사용자로부터 데이터를 수신하기 위해 대화형 제어를 생성하는 데 사용되며, 버튼, 체크박스, 날짜, 이메일 등 포함된다.강의에서 제작하는 인풋 컴포넌트는 버튼, 체크박스, 라디오 버튼, 스위치 버튼, 텍스트 필드, 텍스트 상자, 셀렉트다. 그중 제작할 때 궁금한 사항이 있었거나 덧붙일 말이 있는 컴포넌트만 따로 글을 쓴다. 버튼버튼은 많이 보고 제작해서 잘 알고 있다고 생각했는데 아니었다. 더 공부해야겠다.❓ 버튼을 제작하던 중 destructive의 역할이 궁금해져 찾아봤다. Apple Developer에 따르면, destructive button은 사용자 데이터를 삭제하거나 되돌릴 수 없는 작업을 수행하는 버튼이다. destructive button은 모양을 통해 사용자가 버튼을 탭할지 클릭할지 신중하게 고려해야 함을 나타낸다. 예를 들어 SwiftUI는 빨간색 배경을 사용하여 수정자와 함께 추가하는 destructive button을 제공한다.   버튼은 경우의 수가 많아 더 세부적으로 분류하는 것을 추천한다고 하셨다. 아래는 Polaris Components 의 버튼 컴포넌트다. 컨트롤 그룹(체크박스, 라디오버튼, 스위치)컨트롤 그룹도 버튼과 마찬가지로 안다고 생각하고 쉽게 만들지 말고 더 주의를 기울여서 제작해야 한다.❓ 컨트롤 그룹(Control Group)이라는 단어는 어디서 온건지 궁금해져서 찾아봤다.M2는 Selection controls라고 Checkboxes, Radio buttons, Switches 를 묶어서 말하고 용도는 다음과 같이 정의한다. "선택 컨트롤을 통해 사용자는 선택사항 선택, 설정 켜기 또는 끄기 등의 선택사항을 포함하는 작업을 완료할 수 있습니다. 선택 컨트롤은 사용자에게 의사 결정을 요청하거나 설정 또는 대화 상자와 같은 기본 설정을 선언하는 화면에서 찾을 수 있습니다."jQuery 에서는 form controls를 Controlgroup라 말한다.chatGPT3.5가 말하기로는, 비슷한 목적을 가지고 사용되는 요소들이라서 같이 묶이는 것이라 한다.   5. 디스플레이(Display) 컴포넌트 만들기디스플레이 컴포넌트는 데이터를 표시하는 컴포넌트를 말한다. 강의에서는 아바타, 아코디언, 뱃지, 툴팁, 구분선, 칩, 카드, 테이블을 다룬다. 그 중에서 툴팁, 구분선, 테이블만 따로 이야기한다. 툴팁툴팁의 포지셔닝이 재밌어서 더 찾아봤다. 아틀라시안에서는 다음과 같이 사용한다. 구분선구분선을 만드는 방법은 두 가지가 있다. frame, stroke. 각자 장단점 있으나 강의에서는 strokes 로 제작한다. 여기서 Auto Layout -> Storkes -> Excluded를 Included 로 변경하면 strokes 제작시의 단점이 많이 줄어든다! 테이블회사 특성상 테이블 만드는 일이 많은편인데 기본적인 가이드를 잘 제시해줘서 큰 도움이 되었다. 이 부분은 미션에서 후술한다.❗ Carbon Design System v11 의 테이블을 찾아봤는데, 헤더의 소팅을 세부적으로 분류하여 참고하기 좋았다. 또 강의에서는 column을 제작하는 방식으로 테이블을 구성했는데, 카본에서는 row로 제작하여 header + toolbar + row + pagination으로 조합하고 있었다. 이런 사례들을 더 찾아보는 것도 공부에 큰 도움이 될 것 같다!  🌟 컴포넌트 제작시 Tip강의에서 그때그때 이야기해주신 방법들인데 정리해두면 나중에 참고하기 좋을 것 같아 모아봤다.instance swap property 설정하기:이름짓기: 타 property와 겹칠 경우 → 를 앞에 추가하기이 부분은 디자이너마다 방법이 다를 듯하다. 이 방법은 이해하기 쉽고 간편해서 좋았다. 다른 디자인시스템에서 이런 부분까지 찾아본 적은 없었는데, 앞으로 눈여겨볼 것 같다. 👀어떤 값을 먼저 보여줄지 결정하기: Preferred values → 상황에 따라 다르게 설정여러가지 아이콘을 보여줄 경우 → 모든 아이콘 체크특정 아이콘만 보여줄 경우 → 해당 아이콘만 체크 ex. 바텀 네비게이션우선순위가 있는 경우 → 순서에 주의해서 체크 focus-ring 제작하기컴포넌트 제작하여 필요할 때마다 붙여넣고 Absolute positioning 하기❓ focus-ring 이란? 포커스 표시기(focus indicator, '포커스 링focus ring'으로 표시되는 경우가 많음)는 페이지에서 현재 포커스가 설정된 요소를 식별한다. 마우스를 사용할 수 없는 사용자의 경우 이 표시기가 마우스 포인터의 독립형 역할을 하므로 매우 중요하다. (출처: web.dev/스타일 포커스) 접근 가능한 WCAG 규격 초점 표시기 설계 가이드 : 포커스링을 찾아보다가 알게 된 아티클인데 잘 정리되어있는 것 같아 첨부한다! 다음에 이 글을 다시 볼 때 다시 읽을 수 있도록~  여태껏 stroke로 작업해왔는데..🫠....... 내가 이해하고있는 포커스의 개념과 달랐어서 거기서부터 놀랐다. 아직 배울 것이 많다! Absolute positioning 크기 상위 레이어와 같이 조정되도록 설정하기: constraints → Left and right, Top and bottom내부 인스턴스 가져오기 : properties → nested instancesicon placeholder 제작하기 : 임의의 '아이콘 플레이스홀더'를 넣어서 플렉서블하게 사용할 수 있도록 함. 크기를 자유롭게 조정할 수 있음.profile에 이미지 넣기 : Unsplash → portrait → style 지정 🎯 미션미션 5~8 의 결과물은 다음과 같다. 최대한 문서화하려 노력했다.미션 5 피그마 컴포넌트 기초 배우고 입력 컴포넌트 만들어보기미션 6 입력 컴포넌트 나머지 만들고 마지막 점검하기미션 7 디스플레이 컴포넌트 만들어보기미션 8 디스플레이 컴포넌트 나머지 만들고 마지막 점검하기1주차와 마찬가지로 항상 볼드님이 제작하시는 디자인 시스템을 최대한 따라서 만드려고 노력했다. 강의를 제작하시는 입장에서 최대한 표준적인 디자인 시스템을 만드셨을테고, 나는 그걸 배우는 입장이기 때문이다. 기초가 튼튼해야 나중에 회사에서도, 사이드 프로젝트에서도 응용할 수 있다! 예외가 하나 있었는데, 테이블이다. SI, 솔루션 기업에서 일해왔고 일하고있어서 테이블을 제작하는 일이 꽤 많다. 그래서인지 나도 모르게 관성적으로 디자인해왔는지 테이블 강의를 들으면서 굉장히 놀랐다. 효율적이고, 배리에이션을 만들기도 간편했다. 덕분에 신나서 몇 개 더 만들었다. 다만 소팅 헤더나 아이콘 버튼 등은 프로퍼티 활용 방법을 더 고민해봐야할 것 같다. 🌼 회고잘 한 점미션 따라가기에 급급했지만 그와중에도 나름대로 문서화를 했다.아쉬운 점월~수에 바빠서 미션 일정을 제대로 따라가지 못했다.보완할 점평소 플러그인 추천 글을 더 살펴봐야 겠다.컴포넌트를 공부할 때 실전에 필요한 것들만 급급하게 공부하는 단계를 넘어서야 한다. 시트에 적으면서 다른 디자인시스템들과 비교하는 등 그 이상의 공부가 필요하다. 또 컴포넌트 문서화 방법도 공부할 필요가 있다.다음주 계획미션 잘 따라가기강의 메모 잘 하기 flexible한 작업물을 만들려면.. inflexible하게 작업해야하나보다.😇 지금은 볼드님의 방법을 그대로 따라하는 중이지만, 실전에서는 네이밍 규칙 정하고, 문서화하고, 스타일이나 배리언트 점검도 스스로 해야 하니 "제대로" 디자인 시스템을 구축할 때 드는 공수가 정말 어마어마할거다. 처음 수강 신청할 때까지만해도 베리어블을 써서 컴포넌트 만드는 것! 만 생각했는데, 컴포넌트 만들 때 주의사항, 잘 만들기 위한 고려사항들까지 생각하게 됐다. 점점 발전하는 내가 보여서 기분이 좋다. 다음주에 배울 내용들이 기대된다.

UX/UI워밍업클럽피그마

miiro

[인프런 워밍업 스터디 클럽 1기] BE 2주차 회고록

두 번째 발자국자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]를 수강하고인프런 워밍업 클럽에 참여하여 쓰는 두 번째 회고록입니다.학습 내용static이 아닌 코드를 사용하려면 인스턴스화를 해야합니다.하지만, 학습에서 진행했던 UserController는 jdbcTemplate를 의존하여 사용하고 있습니다.이를 가능케 하는 것은 @RestController 어노테이션으로 의해 의존이 가능해지고 해당 클래스를 스프링 빈으로 등록시킵니다. 스프링 빈서버가 시작되면, 스프링 서버 내부에 거대한 컨테이너를 만듭니다.해당 컨테이너 안에는 클래스가 들어가게 되고, 다양한 정보(이름, 타입) 도 함께 들어가고, 인스턴스화도 이루어집니다.서버가 시작되면 코드의 구현 순서에 대해 살펴보겠습니다.스프링 컨테이너(즉, 클래스 저장소)가 시작됩니다.기본적으로 생성되어있는 스프링 빈들이 등록됩니다.사용자가 설정한 스프링 빈이 등록됩니다.필요한 의존성이 자동으로 설정이 됩니다. 여기서 스프링 컨테이너를 사용하는 이유를 살펴보면 2가지의 스프링 프레임워크의 특성 때문입니다.첫 번째는 제어의 역전(IOC) 이다. 말 그대로 메서드나 객체의 호출 작업을 개발자가 결정하는 것이 아닌, 외부(스프링 컨테이너)에서 결정되는 것을 의미입니다. 객체의 의존성을 역전시켜 객체간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 해서 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있도록 도와줍니다.두 번째는 의존성 주입(DI) 로 객체를 직접 생성하는 것이 아닌 외부에서 생성할 후 주입시키는 방식을 의미한다.이를 통해 모듈 간의 결합도가 낮아지고 유연성을 높일 수 있습니다.  스프링 빈으로 등록하는 방법여기서 중점적으로 사용하는 어노테이션에 대해 살펴보겠습니다. @Configuration클래스에 붙이는 어노테이션@Bean을 사용할 때 함께 사용외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때 사용한다.@Bean메서드에 붙이는 어노테이션메서드에서 반환되는 객체를 스프링 빈에 등록한다.외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때 사용한다.@Service, @Repository개발자가 직접 만든 클래스를 스프링 빈으로 등록할 때 사용한다.@Component주어진 클래스를 컴포넌트로 간주한다.해당 클래스들은 스프링 서버가 뜰 때 자동으로 감지된다. @Component 사용컨트롤러, 서비스, 레포지토리 X개발자가 직접 작성한 클래스를 스프링 빈으로 등록 시에 사용되기도 한다. 스프링 빈 주입 방법생성자를 활용하여 주입하는 방법setter와 @Autowired를 사용하는 방법필드에 직접 @Autowired를 사용하는 방법 JPA(Java Persistence API)데이터를 영구적으로 보관하기 위해 Java 진영에서 정해진 규칙영속성 : 서버가 재시작되어도 데이터는 영구적으로 저장되는 속성 ORM(Object-Relational Mapping)객체와 관계형 DB의 테이블을 짝짓는 방법HibernateJPA를 구현(implement)해서 코드로 작성한 구현체내부적으로 JDBC를 사용한다   JPA 어노테이션@Entity : 스프링이 객체와 테이블을 같은 것으로 바라본다.Entity 뜻 : 저장되고, 관리되어야 하는 데이터@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;@Id : 위 필드를 primary key로 간주@GeneratedValue : primary key는 자동 생성되는 값GenerationType.IDENTITY : MySQL의 auto_increment 전략과 매칭JPA를 사용하기 위해서는 기본생성자가 꼭 필요하다 @Column(nullable = false, length = 20, name = "name") private String name;@Column : 객체의 필드와 Table의 필드를 매칭한다.null 여부, 길이 제한, DB Column 이름 등을 사용@Column 어노테이션을 생략할 수도 있다.  트랜잭션(Transaction)쪼갤 수 없는 업무의 최소 단위 모든 SQL 한번에 성공 or 하나라도 실패하면 모두 실패 트랜잭션 명령어start transaction; : 트랜잭션 시작하기commit; : 트랜잭션 정상 종료(SQL 반영)rollback; : 트랜잭션 실패 처리(SQL 미반영)   트랜잭션 적용 방법@Transactional public void saveUser(UserCreateRequest request) { userRepository.save(new User(request.getName(), request.getAge())); }SELECT 쿼리만 사용한다면 readOnly 옵션 사용 가능@Transactional(readOnly = true) public List<UserResponse> getUsers() { return userRepository.findAll().stream() .map(UserResponse::new) .collect(Collectors.toList()); } ❗ 주의사항IOException 과 같은 Checked Exception은 롤백이 일어나지 않는다. 영속성 컨텍스트테이블과 매핑된 Entity 객체를 관리/보관하는 역할스프링에서는 트랜잭션을 사용하면 영속성 컨텍스트가 생겨나고, 트랜잭션이 종료되면 영속성 컨텍스트가 종료특징변경 감지(Dirty Check)영속성 컨텍스트 안에 불러와진 Entity는 명시적으로 save 하지 않더라도, 변경을 감지해 자동으로 저장된다.@Transactional public void updateUser(UserUpdateRequest request) { User user = userRepository.findById(request.getId()) .orElseThrow(IllegalArgumentException::new); user.updateName(user.getName()); }쓰기 지연DB의 insert/update/delete SQL문을 바로 날리는 것이 아닌, 트랜잭션이 commit될때 모아서 1번만 날린다.1차 캐싱ID를 기준으로 Entity를 기억한다.캐싱된 객체는 완전히 동일하다.(객체 주소도 같다) JPA 연관관계ex) 사람(person)과 실거주 주소(address)사람 1명은 1개의 실거주 주소만을 가지고 있다.@OneToOne연관관계의 주인을 설정한다.(mappedBy 사용한다.)연관관계의 주인 효과상대 테이블을 참조하고 있으면 연관관계의 주인이다.연관관계 주인이 아니면 mappedBy 사용연관관계의 주인의 setter가 사용되어야만 테이블이 연결@Transactional public void savePerson() { Person person = personRepotiory.save(new Person()); Address address = addressRepotiory.save(new Address()); person.setAddress(address); } 연관 관계의 주의점트랜잭션이 끝나지 않았기에, 한 쪽만 연결해두면 반대쪽의 값은 알 수 없다. @Transactional public void savePerson() { Person person = personRepotiory.save(new Person()); Address address = addressRepotiory.save(new Address ()); person.setAddress(address); System.out.println(address.getPerson); //null 반환 }이를 방지하기 위해 setter 한 번에 둘을 같이 이어준다.public void setAddress(Address address) { this.address = address; this.address.setPerson(this); } 다대일,일대다관계@ManyToOne을 단방향으로 사용할 수 있다.@JoinColumn연관관계의 주인이 활용할 수 있는 어노테이션필드의 이름이나, null 여부, 유일성 여부, 업데이트 여부 등을 지정할 수 있다.다대다관계(N : M 관계)@ManyToMany구조가 복잡하고, 테이블이 직관적으로 매핑되지 않기 때문에 사용하지 않는 것을 지양한다.cascade 옵션한 객체가 저장되거나 삭제될 때, 그 변경이 폭포처럼 흘러서 연결되어 있는 객체도 함께 저장되거나 삭제되는 기능orphanRemoval 옵션객체간의 관계가 끊어진 데이터를 자동으로 제거하는 옵션 @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List<UserLoanHistory> userLoanHistories = new ArrayList<>();지연 로딩(Lazy Loading)연결되어 있는 객체를 꼭 필요한 순간에 데이터를 로딩한다. @OneToMany의 fetch() 옵션 연관관계의 장점각자의 역할에 집중하게 된다.새로운 개발자가 코드를 읽을 때 이해하기 쉬워진다.테스트 코드 작성이 쉬워진다.연관관계 사용 시 주의 사항지나치게 사용하면 성능 상의 문제가 발생할 수 있다.도메인 간의 복잡한 연결로 인해 시스템을 파악하기 어려워질 수 있다.요구 사항 등 여러 부분을 고민해서 연관 관계 사용을 선택해야한다. 과제 내용Day 4Day2에서 진행했던 GET API와 POST API를 구현했었는데, 그 당시에는 database를 사용하지 않은 방법으로 과제에서 주어진 조건에 맞게 답을 출력했었습니다. 이번 과제에서는 DB를 활용하여 정보를 저장하고, 수정할 수 있는 로직을 구현해야했습니다.Layer를 분리해서 진행을 할 수 있지만, 간단하게 문제의 답만 도출하기 위해서 Controller Class에 구현을 진행했었습니다.그렇기 때문에 Spring Data JPA가 아닌 JDBCTemplate를 활용하여 진행했습니다. JPA를 통한 DB 로직을 구현하는 것만 주구장창 했어서, 직접 쿼리문을 작성해서 진행하는 JDBCTemplate를 사용하는 방법에 대해 알 수 있었던 거 같습니다.📋 4일차 미션 : GET API와 POST API 구현 Day 5클린 코드는 코드를 아름답게 만드는 것이 아닌 코드의 질을 향상 시키는 데 중요하다는 것을 알았습니다.클린 코드를 구현하기 위해서 명확하고 간결하게 코드를 구현하여 버그를 줄이고, 그로 인한 개발 속도를 향상시킬 수 있습니다.또한, 잘 작성된 코드는 시간이 흘러도 이해하기 쉽기에, 유지 보수가 간편합니다. 이로 인해 개발자로서 팀 프로젝트를 진행할 시에팀 커뮤니케이션을 원활하게 진행할 수 있도록 도움을 줄 수 있다는 것을 알게 되었습니다.📋 5일차 미션 : 클린 코드 구현  회고스프링 프레임워크의 핵심 개념인 제어의 역전(IOC)과 의존성 주입(DI)을 통해 더 나은 코드 작성과 유지 보수의 용이섬에 대해 알게 되었습니다. 또한 어노테이션들을 활용하여 클래스를 스프링 빈으로 등록하고, 스프링 컨테이너가 이를 관리함으로써, 필요한 의존성을 자동으로 설정할 수 있다는 사실을 배웠습니다. JPA를 통한 데이터의 영속성 관리와 ORM을 통한 객체와 DB의 매핑에 대해 이론적으로 정립할 수 있는 계기되었던 거 같습니다.서비스를 구성하는 데 가장 중요한 @Transactional 어노테이션을 사용하여 데이터의 일관성을 유지하는 방법을 쉽게 공부하면서 더티 체크, 쓰기 지연 등 특성에 대해 알 수 있었던 거 같습니다.객체와 DB를 효과적으로 설계할 수 있도록 연관관계를 설계하는 방법을 배움으로써 사용할 때의 주의사항과 성능 문제를 방지하기 위한 전략에 대해 알게 되면서 이를 통해 효과적이고 용이한 애플리케이션 개발을 할 수 있는 토대를 마련할 수 있었던 거 같습니다.  

백엔드인프런워밍업스터디클럽2주차회고록

최지선

2주차 [피그마 배리어블을 활용한 디자인 시스템 구축하기] 발자국 😎

일주일 동안의 나의 게으름 타파 작전!!bold님의 강의 [피그마 배리어블을 활용한 디자인 시스템 구축하기]수강 2주차(베리어블을 활용한 UI Component 만들기) 이번주 나의 강의 ☑컴포넌트를 만들기 위해 구조 이해하기  프로퍼티 종류 이해하기 컴포넌트 만들기 인풋 컴넌트☑버튼(button) 컴포넌트☑컨트롤 컴포넌트(체크박스(check), 라디오(radio), 스위치(switch)) ☑라벨(label)을 만들고 컨트롤 그룹 컴포넌트 만들기☑ 텍스트 필드(text_field) 컴포넌트 ☑ 텍스트 박스(textarea) 컴포넌트☑ 셀렉트(select) 컴포넌트☑ 접근성 포트를 생성하고 접근성이 위배된 것을 수정-> 프로퍼티와 값을 정하는 게 나에게는 매우 어렵게 느껴졌다. 영어를 못해서 그런 건지😭 모르겠지만 처음엔 많이 어려웠는데 컴포넌트를 하나씩 만들어 가면서 어느정도의 룰이 있다는걸 알게 되면서는 조금씩 나아지는것 같았다. 디스플레이 컴포넌트✅ 아바타(avatar) 컴포넌트✅ 아코디언(accordion) 컴포넌트✅ 뱃지(badge) 컴포넌트✅ 툴팁(Tooltips) 컴포넌트✅ 구분선(divider) 컴포넌트✅ 인터랙티브 칩(chips) & 상태칩(chips) 컴포넌트✅ 기본 카드(Basic Cards)✅ 테이블(table) 컴포넌트✅ 접근성 레포트를 생성하고 접근성이 위배된 것을 찾아 수정하기-> 인풋 컴넌트를 만들고 나서인지 프로퍼티를 사용하는데 익숙해진 느낌이었다. 여러 가지 케이스를 만들면서 디자인 시스템의 위대함🤣을 조금 알게 된것 같기도 하다. 강의를 들은 나의 회고 😭😭한 컴넌트를 만들 때도 여러 케이스를 많이 만들어 볼 수 있어서 약간 힘들긴 했지만 확실히 도움이 된다는 생각이 들었다. 그리고 힘들게 등록했던 베리어블을 적용하면서 만들었기 때문에 쓰임새를 잘 알 수 있었던 한주였다. 프로퍼티와 값을 이해하는데 시간이 걸리기는 했지만 그걸 자세하게 배울 수 있어서 더 좋았던 거 같다🔥🔥🔥다음 주도 기대가 많이 된다. 미션 컴플리트내가 고생해서 만든 컴포넌트들을 조합해 보는 미션이 주를 이루었다. 컴넌트가 어떻게 쓰이는지를 생각하고 만들어 볼 수 있어서 도움이 되었다. 어떤 디자인에서 어떤 컴퍼넌트를 적절하게 사용하느냐도 근무 시간을 줄이는 것 중 하나이기 때문에 중요하게 생각하고 미션을 클리어했다.

낌밤

UXUI 디자이너를 위한 무료 애니메이션 툴 'phase' 사용기

독일&대만 애니메이션 툴이 한국에 첫 번째로 론칭했다는 소식을 듣고 바로 사용해보았다.직접 사용해보고 느낀점 들을 정리 해보았다. 📌 쉽고 익숙한 인터페이스인터페이스가 figma와 유사하고, 기타 디자인 툴을 사용해본 사람은 바로 느낌이 오는 인터페이스.레이어창이나 디자인 패널의 위치가 너️무 익숙해서 한번에 슉슉 찾아서 실행해 볼 수 있었다.그래서 배우기도 더 쉽겠다고 느꼈다. 📌 무료로 이용가능한 툴 ⭐⭐⭐⭐⭐어도비, 피그마, Open AI 등 디자인을 위해 이미 구독하고 있는게 많아 걱정됐는데, 무료 체험판이 아닌 전 기능을 무료로 이용할 수 있었다. 무료 애니메이션 툴이라고 퀄리티가 낮은 것도 아니었고,여느 애니메이션 툴과 비교해도 퀄리티 높은 결과물을 만들 수 있는게 정말 큰 장점이었다 📌 웹기반 ⭐⭐⭐⭐⭐ (협업 + 용량)웹기반 애니메이션 툴이여서 공동 작업자를 초대해서 한 화면에서 작업할 수 있었다.피그마처럼 히스토리 + 코멘트 기능까지 있어 협업에도 최적화 되었구나~ 하고 느꼈다.플래시부터 에펙까지 다 써온 나로써 웹기반 클라우드로 파일 저장이나 용량 부담없는 것 또한큰 장점으로 다가왔다. 📌 한국 튜토리얼과 안내한국이 첫 릴리즈여서 그런지 한국어 대응이 잘되어있다고 느꼈다.홈페이지에서 확인할 수 있는 공식 튜토리얼은 모두 한국어로 진행되고 있고 한국 공식 sns나 채팅방을 운영해서 바로 물어보고 답변받기 좋았다. 📌 간편한 핸드오프작업물을 개발자에게 핸드오프하기 용이했다. json파일로 추출이 되니 바로 전달하면 되고, mp4나 gif같은 일반 애니메이션 확장자로도 추출가능하니 필요에 맞게 사용하면 된다. phase가 궁금한 분들은 홈페이지에서 확인해봐도 좋을 것 같다. https://zrr.kr/vAgZ홈페이지에 들어가니 이벤트도 진행하고 있었다. 애니메이션 제작 챌린지를 통해 총 558만원 상금도 준다.1등이 270만원! 내꺼다!!! 

애니메이션모션그래픽UXUI

90년대 컴퓨터 공학 이야기 (1) — 80년대 이야기 — 퍼스널 컴퓨터

90년대 컴퓨터공학과를 다니면서 모은 에피소드들이지만, 기억은 80년대의 몇몇 단어들에서 시작한다.퍼스널 컴퓨터 경진대회1985년 국민학교에서 방과후 학습으로 산수경시반을 뽑았는데, 당시 부산에서 인근 구청에서 있던 수학경시대회가 없어지는 바람에 컴퓨터반으로 변경되어 운영이 되었고, 퍼스널 컴퓨터라는 것을 접하고 경진대회라는 것도 접하게 되었다. 지금 있는 올림피아드의 원형일 것이고, 당시 운도 좋았어서 1986년에는 부산 대표로 서울 잠실이라는 곳을 처음 올라오는 경험도 하게 되었다. 마치 과거 시험을 보듯이 넓은 공간에 각자 컴퓨터를 들고 와서 4시간인가 시험을 치르는 자리였고, 여기를 오기 위해 구 대회, 부산 시 대회 등을 거쳐야 했었다.첫 출전 당시 버그로 인한 탈락의 아픔이 있었고, 이를 극복해 보고자 지역에서 여러 번의 시도를 하며 중학교 2학년까지 여러 가지 기량을 쌓음과 동시에 컴퓨터 게임과 더 친해지게 되었다. 전국 대회와의 인연은 더이상 닿지 않았지만, 마지막 대회에서 구 1위까지는 올라갔던, 나름 해피 엔딩.삼성 SPC 1000우리 집에서의 첫 삼성 제품은 이 컴퓨터였다. 학교에서 접하고 나서 서울 전국대회 출전권을 따고 나서 부모님을 졸라서 인연이 닿은 첫 컴퓨터. 테이프를 이용한 낯선 기계음, 그것이 끝나면서 시작되는 게임들, 흑백 화면에서 펼쳐지는 dot 의 아기자기함 등… 국민학교를 함께 했고, 각종 대회에 같이 다녔으며 아쉬움과 실패를 경험하게 했던 기억들.컴퓨터학습매달 용돈을 받거나 벌어야 했던 첫번째 이유. 가끔씩 자매품인 학생과 컴퓨터 도 있어서 매 달 둘 중 어느 것을 사야 하나 고민을 했던 경험도 있고, 더 고급진 책도 있었던 기억이지만, 적당히 재미난 내용들, 신기술, 거기에 게임도 섞여 있었음. 무엇보다 이 책이 가진 의미는 소스 코드들에 있었고, 이를 타이핑하면서 인내심을 알게 모르게 키워 왔던 게 나중에 값지게 쓰였던 것 같다.Apple II+중학교 때 경진대회를 위해 졸라서 하나 새걸로 장만했던 기억인데, 이 때 제품이 정확하게 뭐였는지는 기억이 없다. IIe 였던 거 같기도 하고… 툭툭거리는 키보드가 마음에 들었었고, 플로피 디스크의 신세계를 여기서 경험하게 되었다. 경진대회를 빙자했지만, 게임 중독으로 가기 일보 직전이었던 거 같다.Lode Runner, Ultima 4, Ultima 5, Ogre나의 중학교 생활을 함께 했던 동지들. Lord British , thou art , 그리고 각종 게임용 spell , ingredient , weapon , dragon , …— -이후 나는 수험생 모드로 입시에 전념하면서 90년대를 맞이한다.

교양컴퓨터공학90년대

한국 IT 용어 이야기 (번외) - "인공지능"

최근, 특히 ChatGPT 이후 격변의 시기에 영어로도 한글로도 어마어마한 신조어들이 나오게 되면서 헷갈리게 되었다. 이전에는 리뷰 받은 후 발표되는 논문들과 official posting 이 source of truth 였다고 한다면 요즘에는 리뷰받지 않은 일방적인 주장 위주의 논문들, 각종 신문, 유튜버, communicator 들이 정신 없는 이야기들 속에서 가끔씩 잠깐만? 싶은 일들이 있곤 한다. 최근에 한 학기 AI literacy 관련 강의를 위해 정리하던 내용들... 2024년에는 또 어떤 신조어들이 생겨날 것인지... 쏙쏙 들어오는(?) 번역들Artificial Intelligence : 인공지능 . 가끔씩은 스피커 대화 서비스 or 챗봇 서비스를 나타내기도..Neural Network : 신경망Reinforcement Learning : 강화학습Gen AI , Generative AI : 생성형 인공지능오래 전부터 쓰였던, 여러 사람들을 통해서 쓰이고 있는 단어들. 상대적으로 귀에 잘 들어 옴. 최선을 다했다 싶은 번역들 ( 그냥 영어로 써도... ? )Convolutional neural networks : 합성곱 신경망Recurrent neural network : 순환 신경망regression : 회귀time series : 시계열Machine learning : 기계 학습Deep learning : 심층 학습Training / Inference : 훈련 / 추론RLHF : 인간 피드백 강화 학습Federated learning : 연합 학습(?) 이제 번역이 어색해 지기 시작함...영어 그대로 쓰자TransformerAttentionFine tuning / retrainigLanguage model / Large language model / small language modelLarge multimodal modelFrontier AI 앞으로 나올 수많은 개념들... 어지간하면 원어 기준으로 받아 들여 보자.. 고유명사 혹은 일반 명사들OpenAI / GPT4 / ChatGPT / 챗GPTGemini / Llama / midjourney / langchainCohere / Adhere / ...PyTorch / Tensorflow / ...Prompt / agent /약자들 : RAG / MoE / BERT ... 뭐가 회사 이름이고, 뭐가 제품 이름인지 이제 헷갈리기 시작... 타사 제품과 서비스와 헷갈리지 않을 수 있으면 좋겠고, 제발 일반명사는 쓰지 말고 귀찮더라도 풀어 설명해 주시길.... --a 불편한 신조어들초거대 AI : 한국형 마케팅 중심의 용어로 추정. "초", "거대" 둘 다 불편함. AI != LM 의 시각에서 알맞은 영어 번역도 떠오르지 않고, 어딘가에서 말하는 hyperscale 은 이미 data center 용 computing 을 나타내는 말로 적절한 영어 번역이 아님.생성형 모델 : 언어 모델을 이용한 생성 서비스 ? bonus - Very초거대 라는 단어를 들으면서 무의식적으로 'very는 아니겠지?' 라는 생각을 했었다. 오래 전 컴퓨터 구조 시간에 배웠던 몇몇 단어들이 생각났는데, '설마 very는 아니겠지?' 라며 들여다 보면 여지 없이 very 였어서 뭔가 작명에 게으른 선배 기술자님들을 떠올렸더랬다.VLSI : Very Large Scale Integration ( 초고밀도 집적 회로 )VLIW architecture : Very Long Instruction Word architectureVHDL : VHSIC Hardware Description Language : Very High Speed Integrated Circuit Hardware Description Language 

교양용어한글영어

한국 IT 용어 이야기 (8) - "팀"

아마도 어릴 때 프로 스포츠들로 팀을 접해서 은연중에 아래와 같은 고정 관념들이 있어 왔다. 1) 적으면 5명, 대개 9명, 많으면 후보 포함 25명, 2) 공통의 목표가 있고, 경쟁을 해서 이겨야 할 상대방이 있음.... 3) 비슷한 규모의 다른 팀이 언제나 있음. 이후 대학교에 들어가서야 팀 프로젝트 같은 걸 접하게 되었고, 다른 단어 고민 없이 여러 가지 문맥에 상관 없이 팀이라는 단어를 접해 왔었다. 아래는 사회 생활을 하면서 접하게 된 "팀"에 대한 몇가지 이야기들..팀장과 팀원사회 생활을 하며 팀장이라는 직함을 쉽게 접하게 되었는데, 삼성전자의 경우 상무이사급 임원이 팀장으로 200명을 거느리고 있는 경우가 있었고, 자그마한 회사에서 1인 팀의 팀장이라 불리는 사람이 있기도, 혹은 3-4명 조별과제 정도 크기의 일들이 있었더랬다. 이 경우 팀장의 역할이라는 것도 스펙트럼이 넓었고, 인사권을 총괄하는 의미부터 간단한 POC 까지 다양했다. scope는 매번 눈치껏 알아서 챙겨야 했지만, 팀장의 호출 하에 한 자리에 모일 정도 되면 하나의 팀원으로 생각하는 정도...?대화 상대로서 ### 팀장이라는 사람을 만났을 때 어디까지를 기대해야 할까 ? 반대쪽의 입장에서 기대하는 정도에 따라서 난이도가 있었던 기억이고, 종종 '팀장이라는 당신 말고 책임자와 이야기하고 싶다' 라는 생각을 했던 기억이다.미국에서의 팀생각보다 광범위하게 쓰여서 다른 의미로 눈치가 필요했었다. 식당에 가면 종업원들이 팀 혹은 crew 로 불리우고 only team member allowed from here 등으로 뭐랄까 그룹지어질 수 있는 모든 규모를 다 팀으로 부르고 있었던 거 같다.회사에서 팀이 커지거나 해서 여러 계층이 필요하게 되었을 때 매번 이름을 짓는 것도 일인데, 행정적 편의로 누구누구네 팀을 그냥 불러서 쓰곤 했었다. Rajan's team, Jen's folks, Michael's guys 등등.. report line 을 통째로 들고 생각하는 모습이라 관리하는 측면에서 많은 이득이 있었다.조직도가 다른 사람들을 차출의 형식으로 모아 일하게 될 때 코드 네임 등을 유용하게 썼던 기억이다. 이전에 구글 플레이스토어 한국/일본 과제를 할 때 미국에서 일하는 한국어/일본어 능력자들을 차출한 후 "dragonball" 이라는 한일관계에 나름 중립적인 팀 이름으로 모인 적도 있었고, 그 이전에 한동안 Calypso 라는 이름으로 50명 정도의 팀이 알려진 적도 있었더랬다. 만나는 거의 모든 사람들과의 대화에 "What is Calypso?" 로 시작했어야 하지만, 나쁘지 않았고, 당시 이름이 과제의 주제와 꽤 잘 맞아서 많이들 좋아했던 기억이다. 검색, 유튜브 등과 같이 거대한 게 되지 않는다면 영원한 것은 없고, 결과적으로 과제 별로는 2-3년 정도가 적당한 life cycle 이었던 거 같다.목적 조직/기능 조직, squad, chapter, task force한국에 다시 조인하고 나서 가장 어색하게 적응했던 것이 목적 조직, squad, chapter, 등의 유사 팀의 운용에 대한 내용이다. 10년 넘게 구글에서 speed & flexibility 에서 전혀 손해를 보았다는 생각이 없는 상태여서 개인차가 물론 있을 것인데, 한국에서 대다수의 회사들이 agile, velocity 등의 명분으로 squad, chapter, silo 등의 이름으로 팀들을 다양하게 나누어 정의하고 운용하고 있음에 많이 어색해 한다.개인적인 선입견이 강하게 있다. 먼저, spotify 에서 시도했지만 실패로 기록이 남았다고 하는데, 그에 비해 너나 할 거 없이 쓰고 있는 게 이해가 잘 안 된다. 그리고 스쿼드의 형태로 운용되려면 아래 3가지 정도는 챙겨 져야 한다는 생각이다. 1) 해체를 포함한 기간을 담보한 직원들 rotation 보장, 2) 모든 직군 별 commitment level ( up to 100% ) 3) 최소한의 코드 quaitly ... 더 깊은 이야기는 케바케일 거 같으니 여기서는 이 정도만 ...당장 치루어야 할 과제를 하기 위해 어쩔 수 없이 시작했다가 여러 이유로 계속 눌러 붙어 있으면서 부작용들이 진행되는 모습들이고, 그게 특히 스타트업씬에서는 더 적나라하게 나타나는 것으로 이해한다. 코드의 경우 쓰는 사람들만 있고 지우는 사람들이 없는 모습과도 닿아 있고, 한두명이 번아웃이 났을 때 위험에 더 드러나게 되는 모습이 되기도 한다. 회사들마다 사정이 다르겠지만, 꼰대스러운 한 마디의 잔소리만 하자면, 스쿼드든 챕터든 나 말고 상대방을, 동료를 한 번 더 생각하고 거드는 모습이 더 있고, 그걸 매니지먼트에서 존중하면 조금 더 낫지 않을까 하는 생각이다.Lead, head of ###구글에 다녔을 때도 한국에서는 상대적으로 작은 규모의 팀이다 보니 중소기업에 다녔을 때처럼 명함의 직함이 조금 뻥튀기 되어 있기도 했다. 구글 내에서는 그래도 자기 직함을 쓰는 건 매니저 승인이 필요했지만, 아무래도 링크드인 출범 이후에 (살짝 과장된) 직함들이 감투로서 쓰이곤 하는 거 같다. 규모가 작은 회사일 수록 Chief , Lead , Head 등이 아무래도 자주 보이는데, 면접 과정이거나 실제 업무를 같이 해 보기 전에 판단을 해야 하는 입장에서는 난이도가 꽤 높다. 뭐 거짓말을 악의적으로 하려고까지는 아니라 생각해도...게다가 최근에 보았던 사례들은 감투를 주면 바로 퇴사를 감행하고, 그들의 이력서는 ### Lead 로 update 되어 있었다. 타사와 협상을 잘 이뤄냈다고 긍정적으로 볼 수도 있겠으나, 새로운 감투를 달았으면 그 감투를 달고 몇 명의 사람들과 어떤 일을 이루어 냈는지 등이 궁금하고 반대로는 자랑하고 싶어야 할텐데, 서로 속고 속이는 세상이 되고 있는 거 같아 조금 씁쓸하고 불안(?)하기도 하다.

교양용어한글영어

전재민

[인프런 워밍업 스터디 클럽 1기_디자인] 첫번째 발자국

첫번째 발자국지난 일주일 동안의 나의 행적과 앞으로의 목표 및 소망  4/26 OT8시에 구글 미트에 모여 피그잼으로 ot를 진행하였다.지식 공유자이자 이번 클럽의 멘토이신 볼드님의 소개로 시작된 ot는피그잼으로 다른 러너분들의 지원 동기, 매일 계획, 끝나고 자신에게 줄 선물 등다양한 생각과 다짐을 들었고, 이번 클럽의 전체적인 진행 방식과 보상에 대해 들었다.그 중 나를 가장 자극 했던건 우수 러너들에게 주어지는 보상으로,꼭 열심히 활동해서 우수 러너가 되겠다는 목표가 생기는 순간이였다.  4/29 1일차디자인 토큰과 베리어블, 그리고 디자인 시스템과 베리어블 이름에 대해 배우는 시간이였다.전문적인 지식을 처음 접하는 나에겐 하나같이 다른 나라 언어처럼 들렸다.하지만 시간을 들여 천천히 또 반복적으로 들어보니 하나 둘 씩 이해가 되기 시작했다.매번 새로운 개념을 보며 불을 발견한 원시인처럼 강의에 빠지게 시작하고 앞으로의 강의가 기대가 된다.  4/30 2일차컬러 베리어블을 등록했던 날.강의에서는 3개의 구조, primitive, theme, sematic을 위주로 설명해주었다 색상 베리어블 구조, 이름 짜보기 강의 중 캡쳐위의 사진이 내게 베리어블 구조를 가장 잘 이해하게 해준 사진이다. 처음으로 베리어블을 만들어보면서 느낀건 primitive, theme, sematic 구조를 이해하고 무슨 역할을 하는지만 알아두면기존에 쓰던 style보다 훨씬 편하고 수정도 빠르다는 것을 느꼈다. 미션은 강의를 천천히 다시 봐보며 메모하고 연습도 해보고 수정도 하는 등그 날에만 7번 정도 베리어블을 처음부터 끝가지 만들어보기도 했다. 개인적으로는 이번 일주일 동안 가장 어려웠고 가장 고생한 날인거 같았다.하지만 내가 써본적도 없는 유용한 플러그인도 많이 알아가는 시간이여서 즐거웠고뭔가 전문적인 지식이 쌓인다는 만족감이 좋았다. 아쉬운 점은 theme에서 color scoping 설정을 못했던 게 조금 아쉬웠다.내가 만든 베리어블 sematic 일부분 캡쳐  5/1 3일차타이포그래피, 아이콘, 간격 베리어블 등록 모바일, 데스크탑 등 다양한 상황에 쓰이는 폰트와 크기, 굵기 등을heding과 body로 나눠 간단하게 스타일로 정리해보았다.가장 기억에 남는건 폰트를 한번에 바꿔주는 플러그인이였다그동안 어떻게 한번에 바꿀까 고민이 많았는데 그 고민을 날려주는 플러그인이였다또 새로운 걸 배워서 좋은 경험이였다. 내가 만든 타이포그래피 중 깨지는 desktop heading 캡처항상 아이콘이 필요하면 icon8에서 하나씩 찾아왔는데다양한 아이콘 사이트를 알게 되었고 아이콘을 하나의 면 처리 작업도 해보았다.중간중간에 깨지는 빌런들 때문에 골머리를 앓았던 날이였다.그리고 아이콘이 깨지면 어떻게 해야되는지 질문 드렸는데 너무 친절하게 답변해주셨다!내가 만든 아이콘 중 깨지는 아이콘 일부 캡처 간격 베리어블을 등록하면서 4,8,12로 짝수로 배치해야 되는 이유에 대해 배운 게 가장 큰 거 같다.매번 간격을 아무렇게 배치하던 내게 반성하는 시간이 되었다. 5/2 4일차그림자, 반응형 그리드, 테두리 및 투명도 높낮이를 표현해주는 그림자를 스타일로 만들어보았다.2개의 properties를 주어서 그림자를 표현하고 라이트와 다크일때의 차이도 구분하며 공부했다.  반응형 그리드는 고정형, 반응형 그리고 하이브리드형을 알게 되었다.하이브리드는 보통 왼쪽이 고정, 오른쪽이 반응형으로 만들어진다고 배웠다.각 그리드의 간격 넓이, 마진도 설정해주고 반응형은 어떻게 늘어나는지까지 실습해 보았다. 다른 색이나 값 처럼 투명도나 테두리도 베리어블로 등록해 사용할수 있다는걸 알았다.원래 이런 기능이 없다는거에 놀라기도 했고, 다음에는 어떤 업데이트가 나올지 궁금해지기도 했다.  5/3 5일차스타일 파운데이션 만들기 지금까지 배운 내용을 돌아보며 하나 하나 만들어보니 내가 지금 뭐가 부족한지,또 어떤건 기억이 남는지 등, 지난 날들을 되돌아보며 재밌게 작업했던 기억이 났다. 아침에는 일정이 있어서 저녁 늦게 시작한 까닭에 정리가 조금 지저분 하면서도완벽하게 나온거 같지가 않아 아쉬웠다. 다른 러너분들은 너무 잘 만들어서 비교되기도 했다.. 무사히 1주차를 넘겼구나 하는 안도감도 들었고앞으로 남은 강의도 열심히 들어야겠다는 다짐을 했다.  5/4 특강중간점검때 다시 볼드님과 온라인으로 만나 이번 한 주의 소감과 궁금했던 점을 이야기 하였다.가장 기억에 남는건 저번 아이콘 배울 때 union을 하면 깨지는 현상를 해결하는 앤트맨 방법에 대해 들었다.단순한 방법으로 문제를 해결하는 볼드님의 모습을 보고 프로는 다르구나 라고 생각하게 되었다. 종합전체적으로 아쉬운 점도 많았지만 그래도 하루도 빼먹지 않고 열심히 한 나를 칭찬해주고 싶다.좀 더 열심히 공부해서 실전에서도 쓸 수 있는 실력을 만들고 싶다.

UX/UIfigma디자인클럽피그마_베리어블디자인

dev_traveler

[인프런 워밍업 스터디 1기 디자인] 피그마 배리어블과 파운데이션

 회사에서 프로젝트가 하나 둘씩 늘어가면서 일관성 없는 UI/UX 가 생겨나고 디자인 시스템이 있으면 좋겠다는 생각을 했습니다. 마침 사랑하는 인프런에서 피그마 배리어블을 활용한 디자인 시스템 구축 스터디를 모집하고 있었고 즐거운 마음으로 참여하게 되었습니다. 디자인 시스템이란? A design system is a collection of reusable components and clear standards that can be assembled together to build any number of applications.[1] Design systems aid in digital product design and development of products such as mobile applications[2] or websites. They may contain but are not limited to, pattern/component libraries, design languages, style guides (font, color, spacing, placement), coded components, brand languages, and documentation.It serves as a reference in combination with a design language that ensures the many different teams involved in designing and building a product create cohesive products that look and behave like each other.[3]-출처: https://en.wikipedia.org/wiki/Design_system살펴보면 디자인 시스템을 구축하기 위해서는pattern/components librariesdesign languages/brand languagesstyle guidescoded componentsdocumentation같은 것들이 필요한 것을 알 수 있습니다. 이 강의에서는 무엇을 배우나?인프런 워밍업 스터디 1기에서 학습하는 피그마 배리어블을 활용한 디자인 시스템 구축하기 - 볼드 UX 에서는 피그마로 디자인 시스템을 구축하기 위해 다음과 같은 것들을 배웁니다.피그마 배리어블디자인 파운데이션 만들기 (font, color, spacing, effect, breakpoint, border, elevation, etc)피그마로 컴포넌트 만들기 (엄청 많이 만듬)모드(light, dark)를 설정해서 배리어블 제대로 활용하는 방법[B2B] e-commerce admin page 만들기[B2C] e-learning page 만들기우리도 당장 적용해야 할까?디자인 시스템을 적용한다고 해서 갑자기 생산성이 좋아지고 일관적인 디자인으로 정리되는 것은 아닙니다. 오히려 생산성이 떨어지겠지요. 프로젝트 기간이 부족하거나 규모가 작을 경우에는 디자인 시스템을 적용하지 않는 편이 더 좋을 수도 있습니다. 디자인 시스템을 구축하는 것만으로도 시간과 노력이 많이 들어가기 때문입니다. A Design System isn’t a Project. It’s a Product, Serving Products.- Nathan Curtis 그러나 디자인 시스템이 안정적으로 도입되고 나면 생산성이 훨씬 높아질것이라 기대합니다. 디자이너의 생산성 뿐만 아니라 기획자, 개발자 등 팀 간의 의사소통도 쉬워지니 전체적인 생산성이 높아지겠지요. 디자인 시스템은 누가 만드나요?디자인 시스템은 디자이너 혼자 만드는 작업이 아닙니다. 디자인 시스템이 프로젝트 전체 팀원간의 소통 도구가 되고 제품 인터페이스의 기반이 되려면 디자이너, 개발자, 비즈니스 간의 효과적인 커뮤니케이션이 중요합니다.코드화된 컴포넌트까지 디자인 시스템에 포함하기 위해 개발팀과 긴밀히 소통해야 합니다. 개발팀에서 현재 프로젝트에서 사용하고 있는 UI 관련 라이브러리를 파악하고 이 라이브러리에서 제공하는 디자인 토큰을 디자인팀에서 반영해야 하면 개발과 디자인 단계에서 큰 도움이 될 수 있습니다.예를 들어 팀에서 tailwindCSS를 사용하고 있다면 tailwindCSS의 디자인 토큰을 디자인 시스템에 반영한 후 디자인 시스템을 구축해 나간다면 좀 더 빠르게 진행할 수 있습니다.무엇보다 디자인 토큰의 이름을 공유해서 디자인팀과 개발팀이 처음부터 같은 용어를 사용한다면 디자인 핸드오프 과정이 한결 쉬워질 것입니다. 디자인 토큰과 피그마 배리어블디자인 토큰은 모든 UI 요소의 기본 구성 요소로 진실의 근원의 역할을 하는 작고 반복 가능한 디자인 결정입니다. 다시 말해, 가장 작은 단위의 디자인 결정을 미리 해두는 것입니다. 예를 들면 색상을 미리 골라둔다거나 여러 가지 폰트 속성을 미리 정의해두는 것입니다. font, color, spacing, effect, breakpoint, border, elevation 등등 다른 디자인 요소들도 토큰화할 수 있습니다.피그마 배리어블은 이런 디자인 토큰들을 변수로 관리할 수 있는 기능을 제공합니다.프로그래밍에서 변수를 만들 때 가장 중요한 것은 변수명을 짓는 것입니다. 이 변수가 의미하는 것이 무엇인지 이름을 잘 지어야 다른 개발자에게 존경받습니다. 이렇듯 디자인 토큰을 변수로 관리한다는 것은 디자인 토큰에 이름을 지어준다는 의미도 됩니다. 파운데이션 만들기여러 종류의 디자인 토큰을 정의하고 문서화해서 파운데이션을 만듭니다. 피그마 배리어블을 사용해 컬러 파운데이션을 만드는 과정을 좀 더 살펴보겠습니다. 피그마 배리어블은 컬렉션에 저장할 수 있습니다. 컬렉션은 여러개를 만들 수 있습니다. 이 컬렉션을 레이어처럼 사용해서 primitive, theme, semantic 같은 이름으로 3개의 컬렉션을 만듭니다. primitive 컬렉션에는 이 세상에 존재하는 모든 색상 중 사용하고 싶은 색상만 모아서 담아줍니다. 이 때 이름은 보편적인 이름으로 짓습니다. theme 컬렉션에는 브랜드 컬러에 맞는 색상들을 primitive 컬렉션에서 골라 담습니다. 이 때 이름은 브랜드 컬러의 관점에서 짓습니다. 마지막으로 semantic 컬렉션에서는 실제 컴포넌트 디자인에서 사용할 색상들을 theme 컬렉션에서 골라 담습니다. theme 컬렉션에 없으면 primitive 컬렉션에서 담아도 괜찮습니다. 이 때 이름은 컴포넌트 관점에서 짓습니다.  이렇게 계층 구조로 배리어블 컬렉션을 만들고 primitive 나 theme 컬렉션은 배리어블 사용 시 드러나지 않도록 숨긴 후 semantic 컬렉션의 배리어블을 사용해서 컴포넌트와 페이지를 만듭니다. 피그마 플러그인앞에서 살펴본 디자인 토큰 배리어블 등록 과정에는 단순 반복 작업이 다소 포함되어 있습니다. 그러나 피그마에는 재미있고 편리한 플러그인들이 많아 이 등록과정이나 문서화 과정을 쉽게 할 수 있는 방법도 있으니 이런 방법을 사용하는 것을 강력 추천드립니다. 인프런 워밍업 클럽 1주차 후기지식공유자 볼드님과 인프런이 준비를 너무 잘해주셔서 서로의 학습을 응원하며 재미있게 작업을 진행하는 분위기가 만들어졌습니다. 이런 커뮤니티가 저에게는 학습 뿐만 아니라 일상의 소소한 즐거움을 줍니다. 워밍업 클럽에 참여하신 모두 완주하길 바라며 수료식에서 한 단계 성장한 모습으로 만났으면 좋겠습니다. 화이팅 🔥

UX/UIfigmadesgin_systemdesign_tokenvariable

weather26

[인프런 워밍업 스터디 클럽 1기 디자인] 1주차 발자국

1주 차 강의먼저, 피그마 베리어블과 디자인 토큰/디자인 시스템 개념에 관한 강의를 들었다. 피그마를 자주 사용하고 있었으나 "로컬 스타일"만 사용하고 있었다. 베리어블은 사용하기 꽤 어렵다고 생각하고 있었다. 하지만 색상, 간격, 타이포그래피, 아이콘 등 강의를 들으면서 순서대로 따라 하다 보니 앞으로 어떻게 써야 하는가에 대해 알게 되었다. 특히, 회사에서 업무를 하면서 "타이포그래피"를 직접 만들고 정하는 게 어려웠는데, 플러그인을 통해서 쉽게 할 수 있다는 것을 알고 바로 적용해 봐야겠다는 생각이 들었다. 미션이번 주 미션은 스타일 가이드 문서 제작을 위해 다양한 베리어블을 만들고 등록하는 것이 미션이었다. 처음에 미션만 보고 '이걸 직접? 전부 다 할 수 있다고?'라는 의심으로 시작했는데, 차근차근 설명해 주시고 플러그인을 통해 작업을 하다 보니 쉽고 빠르게 할 수 있었다. 가장 좋았던 것은 하나씩 등록하는 과정을 결과적으로 "문서화"작업을 한 것이었다. 매번 디자인 시스템이라는 것을 만들고 싶어도 어떻게 해야하는지 모르고, 어렵게만 느껴졌는데, 이렇게 하다보면 만들어 볼 수 있겠다는 용기가 생겼다. 회고잘했던 점 강의 듣고 나중에 작업하는 게 아니라, 직접 따라 하면서 만들어 본 것 다양한 플러그인을 써보고 정리한 것아쉬웠던 점 이번에는 시간이 부족해 강의를 몰아서 들었지만, 다음에는 공부할 시간을 확보해서 들어야겠다.보완하고 싶은 점 공부하고 있는 것과 실제 실무에서 사용하는 것을 연결해서 생각하고, 작업해야겠다.

UX/UIFigma인프런워밍업클럽

해피페이스

모든 구멍에 맞는 열쇠는 없다.

안녕하세요! 저는 이력서 첨삭을 주제로 멘토링을 하고 있는 해피페이스 입니다.(저에 대한 간단한 소개)What I do아침출근 시간이 너무 아까워서 출근길 독서 사진 인증방을 운영하고 있고내가 아는 것을 남에게 알려주는 것이 재미있어서 프로그래밍 레슨도 하고 있습니다.Who I am미술을 하다가 HTML, CSS, JS만 할 줄 알면 되는 줄 알고 개발자의 길로 들어섰습니다. 제가 그 동안 이력서 첨삭을 하면서, 그리고 스스로 이력서를 쓰면서 느꼈던 점들을 나누어보려고 합니다.주제는이력서쓰면서 가장 많이 저지르는 실수입니다. 첫번째 실수: 이력서가 한편의 글이고 논설문이라는 것을 놓쳤습니다.이력서는 독자가 채용 담당자이고, "제가 이 직무에 적합합니다."라는 주제를 가지는 글입니다.구체적으로는 "00기업과 내가 잘 맞는 이유", "00팀의 팀원으로 적합한 이유"가 됩니다.그러니까 한줄 소개가 글의 서론에 해당하는 주장이 되고,그 아래에는 주장에 대한 근거가 나와야 합니다.예를 들어 회사 A가 지식을 나누고 소통하는 사람을 우대한다고 합니다. 지원자 B는 자신이 그 동안 관련 활동을 해왔기 때문에 적임자라고 생각합니다. 이력서를 관련 내용을 강조하여 작성하였습니다. 예시) 주장: 지식을 나누는 개발자 000입니다.❌: 이력서 내용에 지식을 나누는 것과 관련된 것이 하나도 없음 -> 주장만 있고 근거가 없는 글이 됨⭕: 이력서 내용에 지식을 나누었던 경험이 트러블 슈팅 및 활동에 녹아있음 -> 주장에 근거가 생김 두번째 실수: "개발을 잘하는 사람임"을 어필 했습니다.신입시절, 저는 "나 이만큼 똑똑해. 그리고 이만큼 노력해"를 어필하려고 했던 것 같습니다.그런데 이것은 자칫 잘난척으로 보일 수 있어요. 채용담당자가 원하는 것은"이 사람이 우리 팀에서 나와 함께 일할 수 있는 사람인가?" 하는 것입니다.같이 일할 동료를 뽑는 것이기 때문에, 잘하는 것 보다 잘 어우러지는 것이 중요합니다.혼자 잘하는 사람이 아니라 함께 잘할 수 있는 사람을 찾는 것이죠.기술적인 내용도 중요하지만, 그만큼 내가 어떤 사람인가? 를 알려줘야 합니다. 세번째 실수: 이력서가 탈락하면 "내 능력이 부족했나?" 생각했습니다.내 이력서가 탈락한 이유는 채용 담당자말고 아무도 모를것입니다.왜냐하면 너무 많은 변수가 있습니다.그러면 떨어져도 퇴고를 하지 말라는 이야기인가요?그것은 아닙니다. 이력서 탈락에 대해서 내 능력 부족이라고 인식하는 것을 지양 하자는 것입니다."포트폴리오가 부족했나?" 혹은 "기술적인 내용을 더해야하나?" 고민하는 것이 아니라,불합격 요인이 될 만한 것들을 제거하는 방향으로 고쳐야 합니다. 불합격 요인의 예시: 내가 어떤 사람인지 드러내지 않는다.(A, B 회사에 지원한 경우)A회사는 활달하고 적극적인 리더쉽 있는 사람을 찾고 있고, B회사는 조용하고 차분하게 일을 꼼꼼히 처리할 사람을 찾고 있음.❌ : 자신이 사용해본 기술만 강조하는 경우 -> 어떤 사람인지 알 수 없다. A, B 회사 모두 불확실 하므로 면접에 부르지 않는다.⭕: 팀원 간의 트러블을 회피하지 않고 처리했다. 결국 팀원 한명이 나갔지만, 남은 팀원들끼리의 결속력을 다지기 위해서 노력했다. -> B회사는 지원자의 기술적인 부분이 부족하다고 여겨 면접에 부르지 않음/A회사는 지원자의 소통능력을 좋게 봐서 면접에 부름⭕: 조용한 성격이라서 팀플을 많이 한 것은 아니지만 개인 프로젝트의 완성도가 높음. 기술적으로 어려운 것도 배워서 바로 쓸 수 있음 -> A회사는 지원자가 팀프로젝트 경험이 적은 것을 우려하여 면접에 부르지 않음/B회사는 지원자가 상세히 기록한 블로그나 개인 프로젝트를 집요하게 완성한 것을 좋게 보고 면접에 부름 네번째 실수: 모든 회사에서 공통적으로 선호되는 인재상이 있다.물론 공통적으로 선호하는 특징은 있을 수 있다. 개발 실력이 좋으면 당연히 좋고, 소통이 잘 되면 좋고, 책임감이 있으면 좋다.그런데 기술적으로 너무 훌륭하고, 문서도 잘 작성하며 동료와 잘 지내고 리더쉽을 발휘하는 사람이 있을까?모든 조건을 다 만족 시키는 회사가 없듯 모든 조건을 다 만족하는 지원자도 없다.그렇기 때문에 팀마다 중요하게 생각하는 것이 있고, 덜 중요하게 생각하는 것이 있다. 즉 나 또한 좋은 회사/팀을 찾기 보다 내게 맞는 팀을 찾는 것이 좋다.(내 열쇠에 맞는 열쇠 구멍을 찾는 것.)마음에 드는 회사에 지금 채용 공고가 나와있지 않더라도 조심스럽게 메일을 보내보세요.제가 했던 마지막 실수는 도움을 청하는 것이 민폐라고 생각했던 것입니다.그런데 도움을 청하면 혼자 끙끙 앓으며 생각보다 쉽게 풀리기도 합니다.때로는 내가 생각했던 문제는 생각보다 큰 문제가 아니고, 사실은 다른 곳에 문제가 숨어있기도 하죠.여러분은 저와 같은 실수를 하지 말고, 적극적으로 인프런 멘토링 코너, 커피챗 어플 등을 이용하셨으면 좋겠습니다.저는 멘토링을 사이드잡이 아니라 취미개념으로 하고 있어서 가격을 비싸게 책정하지 않지만 대신 일주일에 두번밖에 하지 않습니다. 저 뿐만 아니라 인프런 멘토링에 많은 멘토님들이 계시니 한번 이용해보시는 것을 추천해드립니다. 다른 서비스에 비교해 가격 책정이 자유로워서, 비용적인 부분이 걱정이시라면 가격을 저렴하게 하시는 분들도 찾을 수 있습니다. 그럼 마지막으로 존 듀이의 명언으로 글을 마치겠습니다.세상의 모든 차이는 '할 말이 있는 것'과 '말을 해야 되는 것' 사이에 있습니다.읽어주셔서 감사합니다. :)

취업 · 이직이력서이력서첨삭멘토링프론트엔드

수진

[인프런 워밍업 스터디 1기 디자인] 1주차(스타일 가이드 만들기) 발자국

월요일부터 본격적으로 시작한 인프런 워밍업 스터디!나는 피그마 베리어블을 활용한 디자인 시스템 구축하는 강의를 선택했다! 이 강의를 선택한 이유현재 다니고 있는 회사에는 디자인 시스템이 없다. 없는 상태에서 일을 하다 보니 페이지마다 디자인들이 일관성 없이 만들어진 것을 보고 얼른 디자인 시스템을 도입해야겠다는 생각이 들었다…하지만 나는 디자인 시스템을 처음부터 구축해본 적은 없어서 강의를 알아보던 중에 인프런에서 워밍업 스터디를 한다는 것을 보았다. 때 마침 베리어블을 활용하여 디자인 시스템 구축 방법을 볼드 강사님의 피드백을 받으면서 배울 수 있는 강의가 있어 당장 신청했다! 1주차 강의 후기1주차 강의는 스타일 가이드 만들기이다.월요일은 피그마 베리어블과 디자인 토큰 / 디자인 시스템 개념 이해하기라는 이론 강의였다. 디자인 토큰과 시스템의 개념을 알고 스타일 가이드를 만드니까 더 이해하기 쉬웠다.화요일부터 실습 강의가 들어가는데 동영상만 봤을 때는 음 이 정도면 쉬워서 미션도 금방 끝나겠네! 하면서 목요일부터 두 개씩 해야지! (멈춰 이 좌식아..!) 하고 집에서 쉬었는데 그런 생각은 하지 말았어야 했다..목요일 퇴근 후 직접 피그마를 켜서 따라해보니까 생각보다 오래 걸리고 결국 미션을 하나 밖에 못 했다..😭그래서 미션이 밀려서 금요일부터 토요일 새벽까지 미션3까지 하고 잤다ㅎ.. 😮‍💨근데 여러 인터넷 강의들을 들어봤지만 이번 인프런 워밍업 스터디는 확실히 다른 분들과 같이 공부하다 보니까 학원 다니는 느낌이 들어서 너무 좋았고 무엇보다 볼드 강사님이 내 미션을 보고 코멘트도 해주셔서 너무 좋았다!! 인프런에서 만나기 전에 인스타에 좋은 디자인 정보들을 올려주셔서 팔로우하면서 일 할 때 참고 많이 했었는데 이렇게 실시간으로 피드백을 받으니 너무너무 좋았다!! 2주차 강의 목표2주차 강의 때는 자만하지 말고 매일매일 미션을 해야겠다는 생각이 들었다. 그래서 2주차 강의 목표를 새워본다면매일 미션 완수하기출근하면서 강의듣기일단 이렇게 2개를 목표로 완주까지 달려볼 것이다!!  

UX/UI워밍업클럽디자인시스템볼드피그마워밍업스터디

한국 IT 용어 이야기 (7) - "매니저"

이번 글에서는 너무나 두리뭉실하게 쓰이고 있는 각종 매니저에 대해 이야기해 보려 한다. 일단 오랜 기억부터한국에서 매니저와 미국에서 매니저내 기억의 가장 오래된 매니저는 나무위키의 순서와 일치한다. 연예인 혹은 운동 선수의 일들을 도와 주는.. 연예인 쪽에서 유병재, 정준하 씨, 그리고 영화에서의 제리 맥과이어 등. 코미디의 소재로 접하기 시작해서 잘못된 선입견을 가지게 되었고 은연중에 '하대'를 기본으로 생각하는 직군으로 생각하고 있었다.(미국에서) 취직을 하니 나에게 매니저가 생겼고, 나도 매니저가 되면서 교육을 받았는데, 이는 한편으로 많이 달랐더랬다. 이른바 '생사여탈권'을 쥐고 있고, 그 사유가 'performance'일 경우 외국인 노동자인 나에게 추방까지 영향을 줄 수 있는 사람이 매니저라는 것이었고, 한국에서 알고 있던 경험과 정반대의 컨셉이었기에 꽤 충격이 컸었다. 그래도 한동안 직급/직책에 explict 하게 manager 라고 주어지지는 않았고, manager/reportee 의 상하관계가 맺어졌었고, 직군에 나타나는 매니저(들)은 또 다른 이야기라 하겠다.직군으로서 다양한 매니저들구글 내에서 다양한 직군으로서 매니저들을 만났다. 가장 가까이에서부터 만났던 것부터는Engineering ManagerProduct Manager / Associate Product ManagerTechnical Program ManagerAccount Manager / Technical Account ManagerGeneral Manager생각해 보니 밖에서도 property manager, facility manager, restaurant manager 등의 직함들을 만날 수 있었던 거 같다.그리고 한국에 와서 알게 된 project manager, CX manager 같은 더 많은 매니저들. 모 회사는 직급 파괴의 수단으로 모두에게 매니저를 붙여 주기도 한다고 들었고, 무의식적으로 받아 들일 때는 쉬웠는데, 촘촘히 생각해 보면 일이 커진다 싶다. (개인적인) 깨달음과 정리들매니저가 뭘 하는 사람인가에 대한 질문에 원래대로 한 발 돌아가서 개인적으로는 아래와 같은 잠정적인 정리이다.직함과 상관 없이 manager/reportee 의 관계의 경우- reportee 들을 이용해서 팀 전체의 성과를 높이고- reportee 들의 행복을 바라면서 자랑도 대신 해 주고- 평가 시기를 제외하고는 동원할 수 있는 최대한으로 일을 잘 할 수 있게 하고- 그래서 팀의 운영의 credit 을 manager가 가지고 가고- 평가 시기에 가장 바쁘고 힘이 있도록...직함에 있는 'manager'는- manager를 제외한 나머지가 어떻게된 "잘" 되게 하는 게 역할-- product manager 는 product 이 잘 되어야 하고-- account manager 는 account 가 더 흥해야 하고... 등...- 고충 처리반의 느낌에 가깝고, 대상의 행복, 성과 or feedback 이 주요 평가 지표- '하대'까지는 아니라도 갑을 관계가 있다면 '을'에 가까움.- engineering manager 의 경우 engineer 들의 고충을 이해하고 처리해 주는 게 주 업무... --a회사에서 상하관계를 맺어 주는 것에 대한 업권 전체에 대한 여러 고민들이 섞이기에 쉬운 문제는 아니라 하겠고, 직함이 세분화되는 것 자체도 주는 질서가 있기에 나의 정리는 하나의 의견으로 각자의 고민이 있다면 조금 정리하는 용도로 쓰이면 한다.직군으로서는 아래의 것들이 가장 헷갈린다... Product manager vs Program manager vs Project manager ( vs Product owner ) 아주 작은 startup 의 경우 혹은 직군 파괴의 회사의 경우는 어떻게 해야 할까... 이 책이 가이드라인은 줄 수 있지 싶다..ps. 한국 IT 용어 이야기 연재(?)는 (8) '팀'으로 일단 마무리하려 합니다. 읽어 주셔서 감사합니다...

교양한글용어영어

상은/Liane

[인프런 워밍업 스터디 1기 디자인] 1주차 발자국

 워밍업 스터디에 참여하게된 이유작년 여름, 배리어블 업데이트 이후 많은 사람들이 해당 기능을 필수로 알아야한다고 했지만토큰에 대한 개념이 부족하기도하였고, 기존에 사용하던 스타일을 통해서도 충분히 작업이 가능했기 때문에 쉽사리 사용하지 못했다.시간이 생긴 지금, 개념을 정확히 알고 배리어블을 사용해보고싶었다.인스타 팔로우하던 볼드님이 강의를 진행한다고 하셔서 바로 신청하게되었고 신청하길 정말 잘한 것 같다.강의를 보며 공부하면.. uiux 직군으로 이직하길 마음먹고 독학으로 피그마를 공부하던 시절과 함께 회사에 사수가 없어 혼자서 고군분투하며 작업하던 나날들이 떠오른다 .. ㅠㅠ 더 열심히 공부해야하는 이유가 늘 떠오른다.이직할때는 개념을 완벽히 이해하고 다양한 기능을 사용하여 더 빠르게 작업 할 수 있는, 스킬업이 되어있는 상태였으면 좋겠다.   기억하고 싶은 부분들색상 배리어블의 구조Primitive : 색의 원시값을 저장해 놓은 디자인 언어의 기본 값Theme : 시멘틱 칼라로 브랜드 모드를 적용하기 위한 목적Semantic : 시맨틱 칼라로 라이트/다크 모드를 적용하기 위한 목적색상 배리어블 등록시border의 색상은 text와 색상이 겹치기 때문에 색상이 살짝 빠진 색상으로 선택해준다. 스타일은 지우기 색상 배리어블 등록 후 적용하려보면, 스타일 목록과 함께 노출되기 때문에 원하는 색상을 찾을때 너무 복잡하기때문에 등록된 스타일은 지우는 것이 좋다.플러그인apply variables혹여나 배리어블을 적용하지 못했다면, 하나하나 눌러서 확인하지 말고 해당 플러그인을 사용하여 자동으로 적용시킬 수 있음styler한번에 text styles 등록 가능frameall선택한 layer들에 fram이 씌워짐색상이 있는 아이콘을 다른 아이콘으로 변경하는 경우, 전체 색상이 변하지 않는 이유A는 1개의 vector가 색상 1개만 먹히기 때문에 B의 2개의 vector중 1개만 색상이 변함[해결 방법]B의 vector를 union을 사용하여 하나로 만들어주면됨 ** 대신 이름은 동일한 이름으로 변경해줘야함합치기 전에는 stroke에 색상이 채워졌었는데, 합친 후에는 fill로 색상이 채워짐

UX/UI인프런워밍업스터디

yuri

[인프런 워밍업 스터디 1기 디자인] 1주차 발자국 및 회고

 [인프런 워밍업 스터디 1기 디자인] 1주차 발자국실무에서 피그마를 사용하지만, 손에 잘 익지 않았었고 피그마 툴의 기능이 계속해서 업데이트되어부분적으로 공부를 해보아도 사용하지 않으면 잊어버리게 되어서개인 스터디 차원에서 피그마 툴도 공부하고 디자인 가이드를 더 체계적으로 알아가고자스터디에 신청하게 되었습니다.업무와 병행하다 보니 스터디에 대한 이해가 부족해서 과제 제출하며 실수를 여러번 하였는데,디스코드를 통해서 실시간으로 피드백 주셔서 틀린 부분을 인지하고 공부할 수 있었습니다.1주차 강의 수강을 통해 배운 것베리어블 기능을 활용해서 피그마에서 디자인 가이드를 관리하는 법다양한 플러그인을 활용해 디자인 가이드를 구축하는 법베리어블의 구조 네이밍 하는 방식과 규칙 등2주차에서 보완하고 싶은 점강의를 들었지만, 놓치는 부분이 있어서 강의를 다시 재수강 할 필요를 느꼈습니다.미션을 미리미리 해두어야 차후에 페이지 제작이 수월할 것 같습니다.강의를 따라하는 것에 그치지 않고 다시 활용하는 방식으로 실습해야 할 것 같습니다.강의가 초반 기초부터 응용까지 알차게 짜여있어서 수강하는 데 어려움이 없던 것 같고일일 과제와 회차가 정해져 있어서 동기부여도 되는 것 같습니다.스터디 하시는 분들 모두 한 주 고생 많으셨고 앞으로도 화이팅입니다! ✊✊

UX/UI워밍업스터디UIUX디자인디자인시스템