Bankacılığın Modern Yüzü: Mevduat Hesapları ve Microservice Devrimi

Umut Akbulut
BilgeAdam Teknoloji
4 min readJun 25, 2024

Bankalarla ilgili en sevdiğiniz şey nedir? Uzun kuyruklar mı? Yoksa ciddi yüzlerle dolu kasvetli odalar mı? Neyse ki, teknoloji sayesinde bankacılık dünyası artık daha parlak ve eğlenceli bir hale geliyor. Bugün, mevduat hesaplarının ne olduğunu ve bu hesapların modern yazılım teknikleriyle nasıl geliştirilebileceğini keşfedeceğiz. Hazırsanız başlayalım!

Vadesiz Mevduat Hesapları

Nedir?

Vadesiz mevduat hesapları, günlük finansal işlemler için kullanılan en temel bankacılık hesaplarıdır. Bu hesaplar, paranızı istediğiniz zaman çekip yatırmanıza olanak tanır.

Amacı Nedir?

Bu hesapların temel amacı, günlük harcamalarınızı yönetmek ve anlık finansal ihtiyaçlarınızı karşılamaktır. Maaşınız bu hesaba yatar, faturalarınız bu hesaptan ödenir ve ATM’den para çekmek istediğinizde bu hesap kullanılır.

Nasıl Çalışır?

Vadesiz mevduat hesapları, bankalar tarafından sağlanan ATM kartları, çek defterleri ve internet bankacılığı gibi araçlarla çalışır. Hesabınızdaki parayı istediğiniz zaman çekebilir veya başka bir hesaba transfer edebilirsiniz. Ancak, genellikle bu hesaplara faiz verilmez veya çok düşük bir faiz oranı uygulanır.

Kanunsal Yükümlülükler

Vadesiz mevduat hesapları, bankalar tarafından çeşitli yasal düzenlemelere tabidir. Bankalar, hesap sahiplerinin kimlik bilgilerini doğrulamak ve kara para aklamayı önlemek için gerekli önlemleri almak zorundadır.

Vadeli Mevduat Hesapları

Nedir?

Vadeli mevduat hesapları, belirli bir süre boyunca parayı bankada tutma karşılığında faiz getirisi sağlayan hesap türleridir.

Amacı Nedir?

Bu hesapların amacı, belirli bir süre boyunca parayı çekmeden tutarak daha yüksek faiz getirisi elde etmektir. Yani, paranız sizin için çalışırken siz rahatça oturabilirsiniz!

Nasıl Çalışır?

Vadeli mevduat hesaplarına yatırdığınız parayı, belirlenen vade sonuna kadar çekemezsiniz. Vade sonunda, anaparayı ve faiz getirisini alabilirsiniz. Vade süresi genellikle birkaç aydan birkaç yıla kadar değişebilir.

Kanunsal Yükümlülükler

Vadeli mevduat hesapları da belirli yasal düzenlemelere tabidir. Bankalar, faiz oranlarını ve vade koşullarını müşterilere açıkça belirtmek zorundadır. Ayrıca, bu hesaplar genellikle mevduat sigortası kapsamındadır.

Tasarruf Hesapları

Nedir?

Tasarruf hesapları, genellikle daha yüksek faiz oranları sunan ve düzenli olarak para biriktirmenizi sağlayan hesap türleridir.

Amacı Nedir?

Tasarruf hesaplarının temel amacı, kişilerin düzenli olarak para biriktirmelerini teşvik etmektir. Bu hesaplar, acil durum fonları, tatil planları veya diğer uzun vadeli hedefler için idealdir.

Nasıl Çalışır?

Tasarruf hesaplarına yatırdığınız paraya belirli bir faiz oranı uygulanır ve bu faiz, genellikle aylık veya yıllık olarak hesabınıza eklenir. Bu hesaplarda para çekme işlemleri genellikle sınırlıdır ve fazla para çekme işlemi yaptığınızda ceza uygulanabilir.

Kanunsal Yükümlülükler

Tasarruf hesapları da yasal düzenlemelere tabidir. Bankalar, faiz oranlarını ve hesap koşullarını açıkça belirtmek zorundadır. Ayrıca, bu hesaplar da genellikle mevduat sigortası kapsamındadır.

Microservice ile Mevduat Hesaplarını Geliştirmek

Geleneksel bankacılık sistemleri genellikle monolitik yapıya sahiptir, bu da onların karmaşık ve yönetilmesi zor hale gelmesine neden olur. Ancak, microservice mimarisi ile bu durum değişiyor. Microservice mimarisi, büyük bir uygulamayı küçük, bağımsız hizmetlere bölerek geliştirmeyi ve yönetmeyi sağlar. Her microservice, belirli bir işlevi yerine getirir ve diğer hizmetlerle API’ler aracılığıyla iletişim kurar.

Microservice ile Geliştirmenin Avantajları

  • Ölçeklenebilirlik: Her bir microservice bağımsız olarak ölçeklenebilir.
  • Esneklik: Farklı microservice’ler farklı teknolojilerle geliştirilebilir.
  • Kolay Bakım ve Güncelleme: Küçük bir hizmeti güncellemek, tüm sistemi etkilemeden yapılabilir.

Java Örneği

Şimdi, basit bir mevduat hesap yönetimi microservice’i yazalım ve Kafka ile entegre edelim.

Adım 1: Projeyi Oluşturma

Spring Boot kullanarak bir microservice projesi oluşturacağız. İlk olarak, gerekli bağımlılıkları ekleyelim:

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>

Adım 2: Entity ve Repository Tanımlama

  @Entity
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String accountNumber;
private BigDecimal balance;

// Getters and Setters
}

public interface AccountRepository extends JpaRepository<Account, Long> {
Optional<Account> findByAccountNumber(String accountNumber);
}

Adım 3: Kafka Yapılandırması

Kafka’yı yapılandırmak için gerekli olan ayarları ekleyelim.

@Configuration
@EnableKafka
public class KafkaConfig {

@Value("${kafka.bootstrap-servers}")
private String bootstrapServers;

@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return props;
}

@Bean
public ProducerFactory<String, String> producerFactory() {
return new DefaultKafkaProducerFactory<>(producerConfigs());
}

@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}

@Bean
public KafkaAdmin kafkaAdmin() {
return new KafkaAdmin(producerConfigs());
}

@Bean
public NewTopic topic() {
return new NewTopic("account-events", 1, (short) 1);
}
}

Adım 4: Service ve Controller Katmanları

@Service
public class AccountService {
@Autowired
private AccountRepository accountRepository;

@Autowired
private KafkaTemplate<String, String> kafkaTemplate;

public Account createAccount(String accountNumber, BigDecimal initialBalance) {
Account account = new Account();
account.setAccountNumber(accountNumber);
account.setBalance(initialBalance);
Account savedAccount = accountRepository.save(account);
kafkaTemplate.send("account-events", "Account created: " + accountNumber);
return savedAccount;
}

public Optional<Account> getAccount(String accountNumber) {
return accountRepository.findByAccountNumber(accountNumber);
}

public Account deposit(String accountNumber, BigDecimal amount) {
Account account = accountRepository.findByAccountNumber(accountNumber)
.orElseThrow(() -> new RuntimeException("Account not found"));
account.setBalance(account.getBalance().add(amount));
Account updatedAccount = accountRepository.save(account);
kafkaTemplate.send("account-events", "Deposit made: " + accountNumber + " Amount: " + amount);
return updatedAccount;
}
}

@RestController
@RequestMapping("/accounts")
public class AccountController {
@Autowired
private AccountService accountService;

@PostMapping
public Account createAccount(@RequestBody Account account) {
return accountService.createAccount(account.getAccountNumber(), account.getBalance());
}

@GetMapping("/{accountNumber}")
public Account getAccount(@PathVariable String accountNumber) {
return accountService.getAccount(accountNumber)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Account not found"));
}

@PostMapping("/{accountNumber}/deposit")
public Account deposit(@PathVariable String accountNumber, @RequestBody BigDecimal amount) {
return accountService.deposit(accountNumber, amount);
}
}

Adım 5: Test Kodları

@SpringBootTest
public class AccountServiceTests {

@Autowired
private AccountService accountService;

@Autowired
private AccountRepository accountRepository;

@Test
public void testCreateAccount() {
Account account = accountService.createAccount("12345", BigDecimal.valueOf(1000));
assertNotNull(account);
assertEquals("12345", account.getAccountNumber());
assertEquals(0, BigDecimal.valueOf(1000).compareTo(account.getBalance()));
}

@Test
public void testGetAccount() {
Account account = accountService.createAccount("12345", BigDecimal.valueOf(1000));
Optional<Account> retrievedAccount = accountService.getAccount("12345");
assertTrue(retrievedAccount.isPresent());
assertEquals("12345", retrievedAccount.get().getAccountNumber());
}

@Test
public void testDeposit() {
Account account = accountService.createAccount("12345", BigDecimal.valueOf(1000));
Account updatedAccount = accountService.deposit("12345", BigDecimal.valueOf(500));
assertEquals(0, BigDecimal.valueOf(1500).compareTo(updatedAccount.getBalance()));
}
}

Adım 6: Uygulamanın Çalıştırılması

@SpringBootApplication
public class BankApplication {
public static void main(String[] args) {
SpringApplication.run(BankApplication.class, args);
}
}

Bu basit örnek, bir mevduat hesabı yönetimi için temel bir microservice’i ve Kafka entegrasyonunu gösterir. Gerçek dünyada, bu sistemler daha karmaşık olacak ve farklı hizmetlerle etkileşime girecektir. Ancak, microservice mimarisinin esnekliği ve ölçeklenebilirliği sayesinde, bu tür sistemleri yönetmek ve geliştirmek çok daha kolay hale gelir.

Sonuç

Mevduat hesapları, bankacılığın temel taşlarıdır ve modern yazılım teknikleri sayesinde bu sistemler daha verimli ve esnek hale getirilebilir. Microservice mimarisi ve Kafka entegrasyonu, bankacılık sistemlerini daha ölçeklenebilir ve yönetilebilir kılarak, bankaların daha hızlı ve güvenilir hizmetler sunmasını sağlar. Unutmayın, teknolojiyi kullanarak finansal sistemleri daha iyi hale getirmek, sadece bankaların değil, hepimizin hayatını kolaylaştırır!

--

--

Umut Akbulut
BilgeAdam Teknoloji

"Tech leader & Software Architect. Passionate about digital transformation, microservices, and innovation in the finance and tech sectors."