내 인생의 가장 중요한 결정을 할 때에 다가와준 사람 그 결정과 과정을 함께 해준 사람 어쩌면 내 인생에서 가장 도움이된 사람이 아닐까 싶다. 나는 그를 귀인이라고 부르기로 했다. 3년동안 연애 하면서 정말 상처도 많이 받고 맞지 않는 부분이 너무 많아 정말 힘들었지만 중간 중간 포기하고 또 포기를 했던 순간들도 있었지만...
그래도 다시 일어서서 끝까지 그 사람을 믿고 따라간 것은 내 인생에서 가장 잘한 일 같다. 그리고 가장 오래 아니 평생 기억될 것이다. 정말 많이 밉고 정말 많이 화나지만 정말 말로 표현할 수 없는 정도로 고마운 사람이고 정말 아직도 많이 사랑하는 사람이다..
덕분에 내가 볼 수 없었던 나의 단점을 볼 수 있었고 내가 정말 그런 사람을 되고 싶지 않기에 정말 꼭 고쳐보려고 한다. 내 생각이라고 합리화 하며 상대에게 이해하라고 강요하지 않기. 내 생각을 정확하게 전달 한다며 상황 장황하게 늘어놓지 않기. 단어 선택에 신중하게 하기. 느려도 괜찮으니까 빨리 이해시키지 않아도 되니까 아니 이해 시킨다는 생각은 버려야지..신중하게 생각하고 조심히 이야기 하기. 특히 갈등 상황에서는 쉽게 감정 상할 가능성이 높으니까..
내가 너무 자기합리화를 해서 내 생각을 너무 강요했다.. 정말 어리석은 짓이지..느려도 괜찮아, 조급해 할 필요 없어, 느려서 상처 주고 받는 것 보다 섣부른 판단에 섣부른 언행으로 상대에게 상처주는 행동은 절대 하면 안된다. 이건 정말을 나쁜 행동이다.
특히 마음이 많이 여렸던 그 사람. 조심스러웠던 그 사람 나에게 이해를 공감을 존중을 원했던 사람..나에게 정말 고마웠던 상대였고 정말 많이 사랑했던 놓치고 싶지 않았던 내 인생에 가장 기억될 귀인이기에 상처 주기 싫다는 조급함에 빨리 이해시켜야 한다는 합리화로 그를 너무나도 여린 그를 내가 상처를 주고 나를 포기하게 만들었다..
이번 3주차에서는 JPA 연관관계 매핑하기 강의에서 만들었던 도서관리 프로그램 배포하기를 하였다.
JPA를 조금 더 객체지향적으로 코드를 고쳐볼 수 있었다.
[3주차 과제]
3주차에서 진행한 미니프로젝트는 출퇴근 사내 관리프로그램이었다.
JPA에 대한 개념이 많이 부족해 생각한 대로 프로그램은 돌아가는데 제대로 코드를 작성한게 맞는지, 코드는 깔끔하게 짰는지 등등 많은 생각이 들었다. 그래도 이번 강의를 통해서 JPA가 무엇인지 어떻게 사용하는지 그리고 스프링에 대한 개념에 대해 조금 더 와닿게 되었다.
오래된 취준 기간으로 약간의 강제성이 필요할 때 우연히 인프런 워밍업 클럽 스터디를 접하게 되었고, 현재 나에게 제일 필요했던 공부인 JPA를 공부할 수 있어 정말 뜻 깊은 스터디였다. 단순 강의만 듣는 것이 아닌 미션과 미니프로젝트를 병행하여서 강의 내용을 보다 더 쉽게 이해할 수 있었다.
이번 스터디로 습득한 지식을 바탕으로 조금 더 공부하여 나머지 2,3,4단계까지 마무리 해보고 개인 서버에 배포까지 해볼 예정이다.
@Entity
@Getter
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false, length = 20)
private String name;
@Column(nullable = false, length = 20)
private String manager;
@Column(nullable = false)
private long employeeCnt;
protected Team(){}
public Team(String name, String manager, long employeeCnt) {
this.name = name;
this.manager = manager;
this.employeeCnt = employeeCnt;
}
public void updateEmployeeCnt() {
this.employeeCnt++;
}
public void updateManager(String name) {
this.manager = name;
}
}
1
Controller
@RestController
@RequestMapping("/attendance/team")
public class TeamController {
private final TeamService service;
public TeamController(TeamService service) {
this.service = service;
}
@PostMapping("/resister_team")
public void resisterTeam(@RequestBody RegisterTeamRequest request) {
service.insertTeam(request);
}
}
Service
@Service
public class TeamService {
private final TeamRepository repository;
public TeamService(TeamRepository repository) {
this.repository = repository;
}
public void insertTeam(RegisterTeamRequest request) {
repository.findByName(request.getName()).ifPresent(team -> {
throw new IllegalArgumentException("이미 존재하는 팀 이름입니다.");
});
repository.save(new Team(request.getName(),
request.getManager(), request.getMemberCnt()));
}
}
RegisterTeamRequest 객체에서 팀 이름을 꺼내와 등록된 팀이 있는지 확인해준다.
@RestController
@RequestMapping("/attendance/employee")
public class EmployeeController {
private final EmployeeService service;
public EmployeeController(EmployeeService service) {
this.service = service;
}
@PostMapping("/register_employee")
public void resisterEmployee(@RequestBody ResisterEmployeeRequest request) {
service.insertEmployee(request);
}
}
Service
@Service
public class EmployeeService {
private final EmployeeRepository repository;
private final TeamService teamService;
public EmployeeService(EmployeeRepository repository, TeamService teamService) {
this.repository = repository;
this.teamService = teamService;
}
@Transactional
public void insertEmployee(ResisterEmployeeRequest request) {
if (request.getRole() == null) {
throw new IllegalArgumentException("직급을 입력해주세요.");
}
repository.findById(request.getId()).ifPresent(employee -> {
throw new IllegalArgumentException("이미 등록된 직원입니다.");
});
repository.save(new Employee(request.getName(), request.getTeamName(),
request.getRole(), request.getBirthday(), request.getWorkStartDate()));
if (Role.MANAGER.equals(request.getRole())) {
teamService.updateManager(request.getTeamName(), request.getName());
}
teamService.updateEmployeeCnt(request.getTeamName());
}
}
Role이 null인지 확인하고 없다면 예외를 발생시킨다.
Id를 사용하여 이미 등록되어 있는 직원인지 확인한다.
있다면 예외를 발생시키고 없다면 새로운 직원을 만들어준다.
Employee 객체를 만들어 새로운 직원을 저장한다.
이때 Role이 매니저인 경우 teamService의 updateManager메서드를 실행시킨다.
teamService의 updateEmployeeCnt 메서드를 실행하여 해당 팀의 직원 수를 증가시킨다.
TeamService
@Service
public class TeamService {
private final TeamRepository repository;
public TeamService(TeamRepository repository) {
this.repository = repository;
}
@Transactional
public void updateEmployeeCnt(String teamName) {
Team team = findTeamByName(teamName);
team.updateEmployeeCnt();
}
@Transactional
public void updateManager(String teamName, String name) {
Team team = findTeamByName(teamName);
team.updateManager(name);
}
private Team findTeamByName(String name) {
return repository.findByName(name)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 팀 입니다."));
}
}